मान लीजिए कि हमारे पास एक क्रमबद्ध सरणी संख्या है, हमें डुप्लिकेट को इन-प्लेस को हटाना होगा जैसे कि डुप्लिकेट तत्व अधिकतम दो बार दिखाई देंगे और नई लंबाई वापस कर देंगे। इस कार्य को करने के लिए हम अतिरिक्त स्थान नहीं ले सकते। हमें इसे O(1) राशि के साथ हल करना होगा। उदाहरण के लिए, यदि सरणी [0,0,0,1,1,1,1,2,3,3] की तरह है, तो आउटपुट [0,0,1,1,2,3,3] होगा। , इसकी लंबाई 7
. हैआइए चरणों को देखें -
- लेन:=2 और n:=सरणी का आकार
- अगर n <=2, तो n लौटाएं
- i के लिए:=2 से n
- अगर अंक[i] !=nums[len - 2] या nums[i] !=nums[len - 1]
- nums[len] :=nums[i], और लेन को 1 से बढ़ाएं
- अगर अंक[i] !=nums[len - 2] या nums[i] !=nums[len - 1]
- रिटर्न लेन
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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