मान लीजिए कि तीन पूर्णांक सरणियाँ हैं arr1, arr2 और arr3 और उन्हें सख्ती से बढ़ते क्रम में क्रमबद्ध किया गया है, हमें इन तीनों सरणियों में दिखाई देने वाले पूर्णांकों की एक क्रमबद्ध सरणी वापस करनी होगी . तो अगर सरणी [1,2,3,4,5], [1,2,5,7,9], और [1,3,4,5,8] हैं, तो आउटपुट [1,5] होगा ]
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- रेस नामक एक सरणी परिभाषित करें
- तीन मानचित्र f1, f2 और f3 बनाएं
- मैं के लिए 0 से arr1 की लंबाई के बीच
- f1[arr1[i]] 1 की वृद्धि
- मैं के लिए 0 से arr2 की लंबाई के बीच
- f2[arr2[i]] 1 की वृद्धि
- मैं के लिए 0 से arr3 की लंबाई के बीच
- f3[arr3[i]] 1 की वृद्धि
- i =1 से 2000 के लिए,
- अगर f1[i] और f2[i] और f3[i], तो
- रिज़ सरणी में i डालें
- अगर f1[i] और f2[i] और f3[i], तो
- रिटर्न रेस
उदाहरण
एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -
#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]