ধরুন আমাদের একটি সাজানো অ্যারে সংখ্যা আছে, আমাদেরকে সদৃশ স্থানগুলিকে সরিয়ে ফেলতে হবে যাতে ডুপ্লিকেট উপাদানগুলি সর্বাধিক দুবার প্রদর্শিত হবে এবং নতুন দৈর্ঘ্য ফিরিয়ে দেবে। এই কাজটি করার জন্য আমরা অতিরিক্ত জায়গা নিতে পারি না। আমাদের এটিকে 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] or nums[i] !=nums[len - 1]
- nums[len] :=nums[i], এবং len বাড়ান 1
- যদি nums[i] !=nums[len - 2] or 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