1.描述
计算两个数组的交
注意事项
每个元素出现次数得和在数组里一样
答案可以以任意顺序给出
样例
nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, 返回 [2, 2]
.
2.分析
和两数组的交类似,不过这里不需要去掉重复元素的操作。
3.代码
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) {
// Write your code here
vector<int> v;
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])
{
v.push_back(nums1[i]);
i++; j++;
}
else if(nums1[i]>nums2[j])
j++;
else if(nums1[i]<nums2[j])
i++;
}
return v;
}
};
4.总结
这里首先对两数组进行排序进而对类似位置的元素进行比较,大元素去找另一个数组的大元素去比较。
如果不排序直接对两个数组的所有元素进行遍历比较会出现这样一个问题。
假设nums1=[7,7],nums2=[6,7],正确结果为[7],但如果遍历nums2和nums1中的每一个元素作比较,
nums2中的7会和nums1中的7比较两次,得到[7,7],因此如果直接采用简单的遍历比较还需要判断出现
次数的问题。