문제 설명
정렬 된 배열에서 중복 항목 삭제 : 정렬 된 배열이 주어지면 반복되는 요소 를 제자리 에서 삭제하여 각 요소가 한 번만 나타나고 제거 된 배열의 새 길이를 반환해야합니다.
예 1 :
배열 nums = [1,1,2]가 주어지면 함수는 새 길이 2를 반환해야하며 원래 배열 nums의 처음 두 요소는 1, 2로 수정됩니다.
예 2 :
nums = [0,0,1,1,1,2,2,3,3,4]가 주어지면 함수는 새 길이 5를 반환해야하며 원래 배열 nums의 처음 5 개 요소는 0으로 수정됩니다. , 1, 2, 3, 4.
해결책
질문은 매우 분명합니다. 이것은 정렬 된 배열이기 때문에 이전 요소와 그 뒤의 각 요소를 비교하려면 이중 포인터를 사용합니다. 다른 값이있는 경우 후자를 할당합니다. 외부 루프의 번호를 첨자하고 마지막으로 외부 루프의 값을 출력합니다.
암호
//双指针方法
int[] nums = {
0,0,1,1,1,2,2,3,3,4};
if(nums==null || nums.length == 1){
System.out.println(nums.length);
}
int i = 0;
int j = 1;
while(j<nums.length){
if(nums[i]==nums[j]){
j++;
}else{
i++;
nums[i]=nums[j];
j++;
}
}
System.out.println(i+1);
요약하자면
이 질문은 현장에서만 작동 할 수 있기 때문에 제한적입니다. 그렇지 않으면 저장을 위해 hashMap을 도입 할 수 있습니다.이 경우 판단은 매우 간단합니다.