정렬된 배열에서 중복 제거

1902 단어 theabbieleetcodedsa
감소하지 않는 순서로 정렬된 정수 배열nums이 있는 경우 각 고유 요소가 한 번만 나타나도록 중복 항목in-place을 제거합니다. 요소의 상대적인 순서는 동일하게 유지되어야 합니다.

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

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

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

커스텀 심사위원:

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

int[] 숫자 = [...];//입력 배열
int[] expectedNums = [...];//올바른 길이의 예상 답변

int k = removeDuplicates(숫자);//구현을 호출합니다.

주장 k == expectedNums.length;
for (int i = 0; i < k; i++) {
assert nums[i] == expectedNums[i];
}

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

예 1:

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

예 2:

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

제약:
  • 1 <= nums.length <= 3 * 104
  • -100 <= nums[i] <= 100
  • nums가 내림차순으로 정렬됩니다.

  • 해결책:

    class Solution:
        def removeDuplicates(self, nums: List[int]) -> int:
            n = len(nums)
            i = 0
            for j in range(n):
                if j > 0 and nums[j] != nums[j - 1]:
                    i += 1
                    nums[i] = nums[j]
            return i + 1
    

    좋은 웹페이지 즐겨찾기