ধরা যাক তিনটি ইন্টিজার অ্যারে arr1, arr2 এবং arr3 আছে এবং এগুলো স্ট্রিক্টলি ইনক্রিজিং অর্ডারে সর্টেড। আমাদের শুধু সেই ইন্টিজারগুলো সহ একটি সর্টেড অ্যারে রিটার্ন করতে হবে যা এই তিনটি অ্যারেতে সবগুলোতে উপস্থিত। তাই যদি অ্যারেগুলো হয় [1,2,3,4,5], [1,2,5,7,9], এবং [1,3,4,5,8], তবে আউটপুট হবে [1,5]।
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব:
- res নামে একটি অ্যারে ডিফাইন করুন
- f1, f2 এবং f3 নামে তিনটি ম্যাপ তৈরি করুন
- i = 0 থেকে arr1-এর দৈর্ঘ্য পর্যন্ত
- f1[arr1[i]] 1 দিয়ে বৃদ্ধি করুন
- i = 0 থেকে arr2-এর দৈর্ঘ্য পর্যন্ত
- f2[arr2[i]] 1 দিয়ে বৃদ্ধি করুন
- i = 0 থেকে arr3-এর দৈর্ঘ্য পর্যন্ত
- f3[arr3[i]] 1 দিয়ে বৃদ্ধি করুন
- i = 1 থেকে 2000 পর্যন্ত
- যদি f1[i] এবং f2[i] এবং f3[i] হয়, তবে
- i res অ্যারেতে ইনসার্ট করুন
- যদি f1[i] এবং f2[i] এবং f3[i] হয়, তবে
- res রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখে আরও ভালো বুঝতে পারবেন:
#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> arraysIntersection(vector<int>& arr1, vector<int>& arr2, vector<int>& arr3) { vector <int> ans; unordered_map <int,int> f1,f2,f3; for(int i =0;i<arr1.size();i++){ f1[arr1[i]]++; } for(int i =0;i<arr2.size();i++){ f2[arr2[i]]++; } for(int i =0;i<arr3.size();i++){ f3[arr3[i]]++; } for(int i =1;i<=2000;i++){ if(f1[i] && f2[i] && f3[i])ans.push_back(i); } return ans; } }; main(){ Solution ob; vector<int> v1 = {1,2,3,4,5}; vector<int> v2 = {1,2,5,7,9}; vector<int> v3 = {1,3,4,5,8}; print_vector(ob.arraysIntersection(v1, v2, v3)); }ইনপুট
[1,2,3,4,5] [1,2,5,7,9] [1,3,4,5,8]
আউটপুট
[1,5]