LeetCode 349,350:两个数组的交集
题目
LeetCode 349:两个数组的交集
这里写图片描述
LeetCode 350:两个数组的交集II
这里写图片描述
思路
两题都是找交集,349要比350难一些,需要考虑去重问题。
349:
leetcode把该题放在了二分查找类别底下,被误导了,一开始思路是从nums1中找nums2的值,由于两个数组存在重复数,实际使用直接遍历查找十分简单。
首先将两个数组排序,各自从nums1和nums2的第一个元素开始,如果相同,将该元素放入输出数组;如果nums1元素大,nums2向后找;如果nums2元素大,nums1向后找,直到有一个数组被遍历。其中将相同元素数组时需要去重。
350:
和349方法相同,删除去重即可。
代码
349:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int n1 = nums1.size();
int n2 = nums2.size();
if(!n1)
return nums1;
if(!n2)
return nums2;
vector<int> ret;
for(int i=0,j=0;i<n1&&j<n2;)
{
if(nums1[i]==nums2[j])
{
if(!ret.size())
ret.push_back(nums1[i]);
else if(nums1[i]!=ret[ret.size()-1]) //去重
ret.push_back(nums1[i]);
i++,j++;
}
else if(nums1[i]<nums2[j])
{
i++;
}
else //nums1[i]>nums2[j]
{
j++;
}
}
return ret;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
350:
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int n=nums1.size();
int m=nums2.size();
vector<int> res;
if(!(n&&m))
return res;
int idx=0;
for(int i=0;i<n;i++)
{
for(int j=idx;j<m;j++)
{
if(nums1[i]==nums2[j])
{
res.insert(res.end(),nums1[i]);
idx=j+1;
break;
}
}
}
return res;
}
};
---------------------
作者:岳麓吹雪
来源:CSDN
原文:https://blog.csdn.net/lin453701006/article/details/81941358
版权声明:本文为博主原创文章,转载请附上博文链接!

浙公网安备 33010602011771号