समस्या विवरण
मान लीजिए हमारे पास दो सरणियाँ हैं; हमें उनका प्रतिच्छेदन ज्ञात करना है।
उदाहरण
यदि इनपुट है: [1,5,3,6,9], [2,8,9,6,7], तो आउटपुट होगा [9,6]
हल करने का दृष्टिकोण
इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें:
- दो मैप mp1, mp2 परिभाषित करें
- एक सरणी res परिभाषित करें
- nums1 में प्रत्येक x के लिए:
- mp1[x] को 1 से बढ़ाएं
- nums2 में प्रत्येक x के लिए:
- mp2[x] को 1 से बढ़ाएं
- mp1 में प्रत्येक कुंजी-मान जोड़ी x के लिए:
- cnt := 0
- cnt := x के मान और mp2[x की कुंजी] का न्यूनतम
- यदि cnt > 0:
- x की कुंजी को res के अंत में डालें
- res लौटाएं
C++ कार्यान्वयन
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v) {
cout << "[";
for(int i = 0; i < v.size(); i++) {
cout << v[i] << ", ";
}
cout << "]" << endl;
}
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int, int> mp1, mp2;
vector<int> res;
for (auto x : nums1)
mp1[x]++;
for (auto x : nums2)
mp2[x]++;
for (auto x : mp1) {
int cnt = 0;
cnt = min(x.second, mp2[x.first]);
if (cnt > 0)
res.push_back(x.first);
}
return res;
}
};
int main() {
Solution ob;
vector<int> v = {1,5,3,6,9}, v1 = {2,8,9,6,7};
print_vector(ob.intersection(v, v1));
return 0;
}
इनपुट
{1,5,3,6,9},{2,8,9,6,7}
आउटपुट
[9, 6, ]