假设存在三个整数数组arr1,arr2和arr3,并且它们以严格递增的顺序排序,我们必须返回仅出现在所有这三个数组中的整数的排序数组。因此,如果数组是[1,2,3,4,5],[1,2,5,7,9]和[1,3,4,5,8],那么输出将是[1,5 ]
为了解决这个问题,我们将遵循以下步骤-
定义一个名为res的数组
创建三个映射f1,f2和f3
对于范围从0到arr1长度的i
f1 [arr1 [i]]增加1
对于范围从0到arr2长度的i
f2 [arr2 [i]]增加1
对于范围从0到arr3长度的i
f3 [arr3 [i]]增加1
对于i = 1到2000,
将我插入res数组
如果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]