[刷题] 349 Intersection of Two Arrays

查找问题

  • 查找有无(只有键)
    • 元素'a'是否存在
    • set(集合)
  • 查找对应关系(键值对应)
    • 元素'a'出现了几次
    • map(字典)
  • set和map的底层实现是红黑树
  • 常见操作
    • insert()
    • find()
    • erase()
    • change(map):改变某个键对应的值

要求

  • 给定两个数组nums,求两个数组的公共元素
  • 输出结果中每个元素唯一
  • 不考虑输出结果的顺序

举例

  • nums1=[1,2,2,1]
  • nums2=[2,2]
  • 结果:[2]

实现

  • 将公共元素放入公共的set中
 1 class Solution{
 2 public:
 3     vector<int> intersection(vector<int>& nums1, vector<int>& nums2){
 4         
 5         set<int> record;
 6         for(int i = 0 ; i < nums1.size() ; i ++ )
 7             record.insert( nums1[i] );
 8         
 9         set<int> resultSet;
10         for( int i = 0 ; i < nums2.size() ; i ++ )
11             if( record.find(nums2[i]) != record.end())
12                 resultSet.insert(nums2[i]);
13                 
14         vector<int> resultVector;
15         for( set<int>::iterator iter = resultSet.begin() ; iter != resultSet.end() ; iter ++)
16             resultVector.push_back( *iter );
17         
18         return resultVector;
19     }
20 };
View Code
  • 简单写法
 1 class Solution{
 2 public:
 3     vector<int> intersection(vector<int>& nums1, vector<int>& nums2){
 4         
 5         set<int> record( nums1.begin(), nums1.end());
 6         
 7         set<int> resultSet;
 8         for( int i = 0 ; i < nums2.size() ; i ++ )
 9             if( record.find(nums2[i]) != record.end())
10                 resultSet.insert(nums2[i]);
11                 
12         return vector<int> resultVector(resultSet.begin(),resultSet.end());
13         
14     }
15 };
View Code

 参考

原文地址:https://www.cnblogs.com/cxc1357/p/12596600.html