跳至主要內容

查找N个数组的公共元素

张威大约 1 分钟数据结构与算法数组

 #include <iostream>
 #include <vector>
 #include <unordered_set>
 
 using std::cout;
 using std::endl;
 using std::cin;
 using std::vector;
 using std::unordered_set;

 //因为set比数组占用的空间大,并且set把数值映射到key都要做hash计算,速度也比数组慢
 //如果数组数值范围可控可以使用数组做hash
 const int M = 20;   //数值的范围
 vector<int> getIntersection3(const vector<int>& nums1, const vector<int>& nums2) {
     unordered_set<int> result_set;  //给结果去重
     int hashTable[M] = {0};
     for(int num : nums1) {
         hashTable[num] = 1;
     }
 
     for(int num : nums2) {
         if(hashTable[num] == 1) {
             result_set.insert(num);
         }
     }
     return vector(result_set.begin(), result_set.end());
 }
 
 void print(const vector<int>& vec) {
     for(int i : vec) {
         cout << i << ' ';
     }
     cout << endl;
 }
 
 int main() {
     vector<vector<int>> arr = { {0,1,2,3,4,5,6,7,8,9},{1,1,2,2,3,4,5,6,7,9},{1,2,3,3,4,  4,4,6,6,7},{1,2,3,4,6,7,8,9,10,10},{1,1,2,2,3,3,4,4,6,8} };
     vector<int> ret = getIntersection3(arr[0],arr[1]);
     for(int i = 2; i < arr.size(); ++i) {
         ret = getIntersection3(arr[i], ret);
     }
 
     print(ret);
 }