정렬된 배열 II에서 중복 제거
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,1,2,2,3]
출력: 5, 숫자 = [1,1,2,2,3,_]
설명: 함수는 nums의 처음 5개 요소가 각각 1, 1, 2, 2, 3인 k = 5를 반환해야 합니다.
반환된 k 뒤에 무엇을 남기는지는 중요하지 않습니다(따라서 밑줄입니다).
예 2:
입력: 숫자 = [0,0,1,1,1,1,2,3,3]
출력: 7, 숫자 = [0,0,1,1,2,3,3,_,_]
설명: 함수는 nums의 처음 7개 요소가 각각 0, 0, 1, 1, 2, 3, 3인 k = 7을 반환해야 합니다.
반환된 k 뒤에 무엇을 남기는지는 중요하지 않습니다(따라서 밑줄입니다).
제약:
1 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums
가 내림차순으로 정렬됩니다. 해결책:
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
n = len(nums)
i = 0
while i < n:
ctr = 1
while i < n - 1 and nums[i] == nums[i + 1]:
ctr += 1
if ctr > 2:
nums[i] = None
i += 1
i += 1
i = 0
while i < len(nums):
if nums[i] == None:
nums.pop(i)
else:
i += 1
return len(nums)
Reference
이 문제에 관하여(정렬된 배열 II에서 중복 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/remove-duplicates-from-sorted-array-ii-3ih1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)