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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。