#leetCode刷题纪实 Day26

https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:

输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。

 

小菜鸡的尝试:

一个自认为还不错的想法:先对两个向量进行排序。然后遍历其中的一个,直到遍历到另一个向量没有比它当前元素更小或相等的元素 却 没有找到和它相等的元素 的时候,视为两向量不共有该元素。如果找到相同的元素,即跳出对第二个向量的遍历,同时记号自增。

 1 class Solution {
 2 public:
 3     vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
 4         vector<int> result;
 5         sort(nums1.begin(), nums1.end());
 6         sort(nums2.begin(), nums2.end());
 7         int curr2 = 0;
 8         for (int i = 0; i < nums1.size(); i ++) {
 9             int flag = 0;
10             while (curr2 < nums2.size() && nums2[curr2] <= nums1[i]) {
11                 if (nums2[curr2] == nums1[i]) {
12                     flag = 1;
13                     curr2 ++;
14                     break;
15                 }
16                 curr2 ++;
17             }
18             if (flag == 1) result.push_back(nums1[i]);
19         }
20         return result;
21     }
22 };

 

膜拜大佬代码:

不得不说,思路很棒。用hashmap存下每个数字在第一个向量中的出现次数,第二个向量去比较出现次数是否是零,是的话推入结果向量并且map中的记录-1

 1 class Solution {
 2 public:
 3     vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
 4         vector<int>rec;
 5         unordered_map<int,int>map;
 6         for(int i =0;i<nums1.size();i++)
 7             map[nums1[i]]+=1;
 8         for(int i =0;i<nums2.size();i++)
 9            if(map[nums2[i]]>0) {
10                rec.push_back(nums2[i]);
11                map[nums2[i]]-=1;
12            }   
13         }
14         return rec;
15     }
16 };

 

 

 

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2019-11-25 23:32  xyy999  阅读(167)  评论(0编辑  收藏  举报