题目链接: https://leetcode.com/problems/intersection-of-two-arrays-ii/
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2, 2]
.
Note:
Follow up:
思路: 还是用hash表, 简单粗暴, 如果是有序的可以不用hash表, 同时扫描两个数组, 找相同的. 如果nums2在磁盘中, 用hash表无影响
代码如下:
class Solution {
public:
vector intersect(vector& nums1, vector& nums2) {
if(nums1.size()==0 || nums2.size()==0) return vector();
vector result;
unordered_map hash;
for(auto val: nums1) hash[val]++;
for(auto val: nums2)
{
if(hash.count(val) && hash[val]>0) result.push_back(val);
hash[val]--;
}
return result;
}
};
python
class Solution(object):
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
cnt = collections.Counter()
for val in nums1:
cnt[val]+=1
ans = []
for val in nums2:
if cnt.has_key(val) and cnt[val]>0:
ans.append(val)
cnt[val]-=1
return ans
from compiler.ast import flatten
class Solution(object):
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
return flatten([[x]*min(nums1.count(x), nums2.count(x)) for x in set(nums1)])