题目描述
给定两个数组,编写一个函数来计算它们的交集。
示例1
- 输入:nums1 = [1,2,2,1],nums2 = [2,2]
- 输出:[2,2]
示例2
- 输入:nums1 = [4,9,5],nums2 = [9,4,9,8,4]
- 输出:[4,9]
说明
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
- 我们可以不考虑输出结果
题解
思路类似于二分查找。先将nums1和nums2数组升序排序,设置两个指针i和j分别指向nums1和nums2。如果两个指针指向的元素相同,就将该元素加入交集;如果某个指针指向的元素大于另一个指针指向的元素,就把指向较小元素的指针后移,直至两个指针指向的元素相等。
代码如下
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> inter;
if(nums1.size() == 0 || nums2.size() == 0) //判断是否有空数组
return inter;
sort(nums1.begin(), nums1.end()); //升序排序
sort(nums2.begin(), nums2.end()); //升序排序
int i = 0;
int j = 0;
while(i < nums1.size() && j < nums2.size())
{
if(nums1[i] == nums2[j])
{
inter.push_back(nums1[i]); //两数组元素相等,加入交集
i++;
j++;
}
else if(nums1[i] > nums2[j]) //nums1中的元素大于nums2中的元素,指向nums2的指针j后移
{
j++;
}
else //nums2中的元素大于nums1中的元素,指向nums1的指针i后移
{
i++;
}
}
return inter;
}
};
结果
出现的问题就是没有考虑到nums1和nums2为空数组的情况,当输入nums1 = [],nums2 = [] 的时候执行出错。
后加入了判断数组为空的语句:
if(nums1.size() == 0 || nums2.size() == 0)
return inter;
提交结果