【数组】 两个数组的交集 II

题目:

解答:

 

 1 class Solution {
 2 public:
 3     vector<int> intersect(vector<int>& nums1, vector<int>& nums2) 
 4     {
 5         if (nums1.size() > nums2.size()) 
 6         {
 7             return intersect(nums2, nums1);
 8         }
 9         
10         unordered_map<int, int> m;
11         for (auto n : nums1) 
12         {
13             ++m[n];
14         }
15         
16         int k = 0;
17         for (auto n : nums2) 
18         {
19             auto it = m.find(n);
20             if (it != end(m) && --it->second >= 0) 
21             {
22                 nums1[k++] = n;
23             }
24         }
25         return vector(begin(nums1), begin(nums1) + k);
26 
27     }
28 };

 

 1 class Solution {
 2 public:
 3     vector<int> intersect(vector<int>& nums1, vector<int>& nums2) 
 4     {
 5         sort(begin(nums1), end(nums1));
 6         sort(begin(nums2), end(nums2));
 7         
 8         int i = 0;
 9         int j = 0;
10         int k = 0;
11         while (i < nums1.size() && j < nums2.size()) 
12         {
13             if (nums1[i] < nums2[j]) 
14             {
15                 ++i;
16             } 
17             else if (nums1[i] > nums2[j]) 
18             {
19                 ++j;
20             } 
21             else if (nums1[i] == nums2[j])
22             {
23                 nums1[k++] = nums1[i++];
24                 ++j;
25             }
26         }
27         return vector<int>(begin(nums1), begin(nums1) + k);
28 
29     }
30 };

猜你喜欢

转载自www.cnblogs.com/ocpc/p/12900160.html