樣例
nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].要求去重谤民,這樣還是稍微有點(diǎn)難度戈稿。
暴力搜索
最暴力的方法阵苇,對(duì)于nums1種的每個(gè)元素都去nums2種搜索动猬,看是否存在捎稚,如果存在桶癣,就把這個(gè)數(shù)放入結(jié)果中拥褂,因?yàn)橐笕ブ兀苑湃氲臅r(shí)候還要檢查一下是否已經(jīng)存在牙寞,我們可以先對(duì)兩個(gè)數(shù)組都進(jìn)行排序來(lái)規(guī)避這個(gè)問(wèn)題饺鹃,顯然太暴力了,都懶得寫间雀,時(shí)間估計(jì)肯定超時(shí)了悔详。
排序+雙指針+手動(dòng)去重
先排序,然后利用雙指針把兩個(gè)數(shù)組種都有的數(shù)放入res惹挟,除了第一次茄螃,每次放入的時(shí)候檢查一下和上一次放入的是否是相同的,如果是相同的就不再放入了连锯。
我也不知道這個(gè)怎么會(huì)超時(shí):
vector<int> intersection(vector<int> nums1, vector<int> nums2) {
if(nums1.empty()||nums2.empty())
return vector<int>();
vector<int> res1;
//vector<int> res;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int n1,n2;
for(n1=0,n2=0;n1<nums1.size()&&n2<nums2.size();)
{
if(nums1[n1]==nums2[n2])
{
if(res1.size()==0||*(res1.end()-1)!=nums1[n1])
res1.push_back(nums1[n1]);
n1++;
n2++;
}
else if(nums1[n1]<nums2[n1]) n1++;
else if(nums2[n2]<nums1[n1]) n2++;
}
return res1;
// write your code here
}
set暴力去重+雙指針归苍。
依次把所有的數(shù)都放入set中(就是去重,排序過(guò)的)运怖,然后利用雙指針遍歷即可霜医,這個(gè)就相當(dāng)esay了。
vector<int> intersection(vector<int> nums1, vector<int> nums2)
{
set<int> res1;
set<int> res2;
vector<int> res;
for(auto n:nums1)
{
res1.insert(n);
}
for(auto n:nums2)
{
res2.insert(n);
}
auto beg1=res1.begin();
auto beg2=res2.begin();
auto end1=res1.end();
auto end2=res2.end();
for(;beg1!=end1&&beg2!=end2;)
{
if(*beg1==*beg2)
{
res.push_back(*beg1);
beg1++;
beg2++;
}
else if(*beg1<*beg2)
{
beg1++;
}
else if(*beg1>*beg2)
{
beg2++;
}
}
return res;
}
over!