Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 정렬된 배열 II에서 중복 제거

<시간/>

정렬된 배열 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 증가
  • 반환 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