ধরুন আমাদের কাছে পূর্ণসংখ্যার একটি অ্যারে আছে, রেঞ্জ 1 ≤ a[i] ≤ n (n =অ্যারের আকার), এখানে কিছু উপাদান দুবার এবং অন্যগুলি একবার প্রদর্শিত হয়। আমাদের এই অ্যারেতে দুইবার প্রদর্শিত সমস্ত উপাদান খুঁজে বের করতে হবে। সুতরাং যদি অ্যারে হয় [4,3,2,7,8,2,3,1], তাহলে আউটপুট হবে [2, 3]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=অ্যারের আকার, ans নামে একটি অ্যারে তৈরি করুন
- আমি 0 থেকে n – 1
- পরিসরে
- x :=সংখ্যার পরম মান[i]
- x 1 দ্বারা কমিয়ে দিন
- সংখ্যা [x] <0 হলে, উত্তরে x + 1 যোগ করুন, অন্যথায় nums[x] :=nums[x] * (-1)
- উত্তর ফেরত দিন
উদাহরণ(C++)
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> findDuplicates(vector<int>& nums) { int n = nums.size(); vector <int> ans; for(int i = 0; i < n; i++){ int x = abs(nums[i]); x--; if(nums[x] < 0) ans.push_back(x + 1); else nums[x] *= -1; } return ans; } }; main(){ Solution ob; vector<int> v = {4,3,2,7,8,2,3,1}; print_vector(ob.findDuplicates(v)); }
ইনপুট
[4,3,2,7,8,2,3,1]
আউটপুট
[2,3]