Leetcode349——两个数组的交集
给定两个数组,写一个函数来计算它们的交集。
三种方法,从暴力到优化
1. O(n²)
两个for循环直接遍历
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int s1=nums1.size();
int s2=nums2.size();
vector<int> res;
for(int i=0;i<s1;i++){
for(int j=0;j<s2;j++){
if(nums1[i]==nums2[j] && count(res.begin(),res.end(),nums1[i])==0 ){
res.push_back(nums1[i]);
}
}
}
return res;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
O(nlogn)
先对数组进行排序,然后用两个指针移动比较
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int s1=nums1.size();
int s2=nums2.size();
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int i=0,j=0;
vector<int> res;
while(i<s1 && j<s2){
if(nums1[i]>nums2[j]){
j++;
}
else if(nums1[i]<nums2[j]){
i++;
}
else{
if(count(res.begin(),res.end(),nums1[i])==0){
res.push_back(nums1[i]);
}
i++;
j++;
}
}
return res;
}
};
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
O(n)
---------------------
作者:westbrook1998
来源:CSDN
原文:https://blog.csdn.net/westbrook1998/article/details/80151805
版权声明:本文为博主原创文章,转载请附上博文链接!

浙公网安备 33010602011771号