假设存在三个整数数组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]