LeetCode 350. 两个数组的交集 II Intersection of Two Arrays II
Posted zsy-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 350. 两个数组的交集 II Intersection of Two Arrays II相关的知识,希望对你有一定的参考价值。
进阶解法1:排序双指针
class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { sort(nums1.begin(), nums1.end()); sort(nums2.begin(), nums2.end()); int p1 = 0, p2 = 0, index = 0; while(p1 < nums1.size() && p2 < nums2.size()) { if (nums1[p1] < nums2[p2]) ++p1; else if (nums1[p1] > nums2[p2]) ++p2; else { nums1[index++] = nums1[p1++]; //nums1的值不会被多余覆盖 ++p2; } } return vector(nums1.begin(), nums1.begin() + index); } };
进阶解法2、3:将小一些的数组存储成哈希表后在长数组上遍历。
class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { if (nums1.size() > nums2.size()) //nums1较大, 交换数组 return intersect(nums2, nums1); unordered_map<int, int> hash; for (int num : nums1) ++hash[num]; int index = 0; for (int num : nums2) { if (hash.count(num) && --(hash[num]) >= 0) nums1[index++] = num; } return vector(nums1.begin(), nums1.begin() + index); } };
以上是关于LeetCode 350. 两个数组的交集 II Intersection of Two Arrays II的主要内容,如果未能解决你的问题,请参考以下文章