题目
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2, 2].
Note:
Each element in the result should appear as many times as it shows in both arrays.
The result can be in any order.
题意
两数组的交集,结果尽可能包含每个数在交集中出现的最多次数。
题解
思路和349思路相同http://blog.csdn.net/xunalove/article/details/79372497,只不过在不去重,同时nums1[i]在nums2中时,删除nums2中一个nums1[i]元素。python代码实现了。但是在c++中vector中remove()是删除nums2中所有等于nums1[i]的数,不可取。
故另取它法,使用map保存nums1中每个数出现的次数,遍历nums2,进行处理。
C++代码
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int>res;
map<int,int>m;
for(int i=0; i<nums1.size(); i++)
{
m[nums1[i]]++;
}
for(int i=0; i<nums2.size(); i++)
{
if(m[nums2[i]]>0)
{
res.push_back(nums2[i]);
m[nums2[i]]--;
}
}
return res;
}
};
python代码
class Solution(object):
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
res = []
for i in range(0, len(nums1)):
if nums1[i] in nums2:
res.append(nums1[i])
nums2.remove(nums1[i]) #删除nums2中该数
if len(nums2)==0 or len(nums1)==0:
return res
return res
python代码更简单