[LintCode] Intersection of Two Arrays II 两个数组相交之二
Posted Grandyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LintCode] Intersection of Two Arrays II 两个数组相交之二相关的知识,希望对你有一定的参考价值。
Given two arrays, write a function to compute their intersection.
Notice
Each element in the result should appear as many times as it shows in both arrays.
The result can be in any order.
Example
Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2, 2].
Challenge
What if the given array is already sorted? How would you optimize your algorithm?
What if nums1\'s size is small compared to num2\'s size? Which algorithm is better?
What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
LeetCode上的原题,请参见我之前的博客Intersection of Two Arrays II。
解法一:
class Solution { public: /** * @param nums1 an integer array * @param nums2 an integer array * @return an integer array */ vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { vector<int> res; unordered_map<int, int> m; for (auto a : nums1) ++m[a]; for (auto a : nums2) { if (m[a] > 0) { res.push_back(a); --m[a]; } } return res; } };
解法二:
class Solution { public: /** * @param nums1 an integer array * @param nums2 an integer array * @return an integer array */ vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { vector<int> res; int i = 0, j = 0; sort(nums1.begin(), nums1.end()); sort(nums2.begin(), nums2.end()); while (i < nums1.size() && j < nums2.size()) { if (nums1[i] < nums2[j]) ++i; else if (nums1[i] > nums2[j]) ++j; else { res.push_back(nums1[i]); ++i; ++j; } } return res; } };
以上是关于[LintCode] Intersection of Two Arrays II 两个数组相交之二的主要内容,如果未能解决你的问题,请参考以下文章
[LintCode] Intersection of Two Arrays II 两个数组相交之二
[LintCode] Intersection of Two Linked Lists 求两个链表的交点