标签:solution http order src arrays ash turn for intersect
进阶解法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
标签:solution http order src arrays ash turn for intersect
原文地址:https://www.cnblogs.com/ZSY-blog/p/12990125.html