मान लीजिए हमारे पास एक क्रमबद्ध सरणी nums है, हमें डुप्लिकेट को स्थानांतरित (in-place) हटाना है ताकि डुप्लिकेट तत्व अधिकतम दो बार दिखाई दें और नई लंबाई वापस करें। इस कार्य के लिए हम अतिरिक्त स्थान नहीं ले सकते। हमें इसे 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;
}
};
int 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