요소 제거

2072 단어 theabbieleetcodedsa
정수 배열 nums 및 정수 val 가 주어지면 val in-place 에서 nums 를 모두 제거합니다. 요소의 상대적 순서는 변경될 수 있습니다.

일부 언어에서는 배열의 길이를 변경할 수 없기 때문에 결과를 배열의 첫 번째 부분에 배치해야 합니다nums. 더 공식적으로, 중복을 제거한 후 k 요소가 있는 경우 k의 첫 번째 nums 요소가 최종 결과를 보유해야 합니다. 첫 번째k 요소 외에 무엇을 남기는지는 중요하지 않습니다.

최종 결과를 k의 첫 번째k 슬롯에 배치한 후 nums를 반환합니다.

다른 어레이에 추가 공간을 할당하지 마십시오. O(1) 추가 메모리로 입력 배열in-place을 수정하여 이를 수행해야 합니다.

커스텀 심사위원:

심사위원은 다음 코드를 사용하여 솔루션을 테스트합니다.

int[] 숫자 = [...];//입력 배열
정수 값 = ...;//제거할 값
int[] expectedNums = [...];//올바른 길이의 예상 답변입니다.
//val과 같은 값이 없는 상태로 정렬됩니다.

int k = removeElement(nums, val);//구현을 호출합니다.

주장 k == expectedNums.length;
정렬(숫자, 0, k);//nums의 첫 번째 k 요소를 정렬합니다.
for (int i = 0; i < actualLength; i++) {
assert nums[i] == expectedNums[i];
}

모든 어설션이 통과되면 솔루션이 수락됩니다.

예 1:

입력: 숫자 = [3,2,2,3], 값 = 3
출력: 2, 숫자 = [2,2,_,_]
설명: 함수는 nums의 처음 두 요소가 2인 k = 2를 반환해야 합니다.
반환된 k 뒤에 무엇을 남기는지는 중요하지 않습니다(따라서 밑줄입니다).

예 2:

입력: 숫자 = [0,1,2,2,3,0,4,2], 값 = 2
출력: 5, 숫자 = [0,1,4,0,3,_,_,_]
설명: 함수는 0, 0, 1, 3 및 4를 포함하는 nums의 처음 5개 요소와 함께 k = 5를 반환해야 합니다.
5개의 요소는 임의의 순서로 반환될 수 있습니다.
반환된 k 뒤에 무엇을 남기는지는 중요하지 않습니다(따라서 밑줄입니다).

제약:
  • 0 <= nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= val <= 100

  • 해결책:

    class Solution:
        def removeElement(self, nums: List[int], val: int) -> int:
            i = 0
            while i < len(nums):
                if nums[i] == val:
                    nums.pop(i)
                    i -= 1
                i = max(i + 1, 0)
    

    좋은 웹페이지 즐겨찾기