C ++中三个排序数组的交集

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