정렬된 배열 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