정렬된 배열 num이 있다고 가정하고 중복 요소가 최대 두 번 나타나고 새 길이를 반환하도록 중복 요소를 제자리에서 제거해야 합니다. 이 작업을 수행하기 위해 추가 공간을 차지할 수 없습니다. 우리는 이것을 O(1)의 공간으로 해결해야 합니다. 예를 들어 배열이 [0,0,0,1,1,1,1,2,3,3]과 같으면 출력은 [0,0,1,1,2,3,3]이 됩니다. , 길이는 7
단계를 살펴보겠습니다 -
- len :=2 및 n :=배열 크기
- n <=2이면 n을 반환합니다.
- i:=2 ~ n
- nums[i] !=nums[len - 2] 또는 nums[i] !=nums[len - 1]
- 인 경우
- nums[len] :=nums[i], len을 1 증가
- nums[i] !=nums[len - 2] 또는 nums[i] !=nums[len - 1]
- 반환 len
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int len = 2;
int n = nums.size();
if(n <= 2)return n;
for(int i = 2; i < n; i++){
if( nums[i] != nums[len - 2] || nums[i] != nums[len - 1]){
nums[len] = nums[i];
len++;
}
}
return len;
}
};
main(){
Solution ob;
vector<int> v = {0,0,0,1,1,1,1,2,3,3};
cout << ob.removeDuplicates(v);
} 입력
[0,0,0,1,1,1,1,2,3,3]
출력
7