LeetCode-349 Intersection of Two Arrays
2016-06-14 22:58
363 查看
https://leetcode.com/problems/intersection-of-two-arrays/
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 =
Note:
Each element in the result must be unique.
The result can be in any order.
1、先排序,再用两指针分别扫描两数组(12ms)
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> num;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int i = 0,j = 0;
while(i<nums1.size() && j < nums2.size()){
if(nums1[i] == nums2[j] && find(num.begin(),num.end(),nums1[i]) == num.end()){
num.push_back(nums1[i]);
i++;
j++;
continue;
}
if(nums1[i]<nums2[j])
i++;
else
j++;
}
return num;
}
};
2、发现STL中有set_intersection()函数,是对于排好序后的两个集合(即不会有重复元素)求交集,因此这里调用该函数的话,会有重复元素出现。
2.1利用unique、erase去重:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
vector<int> num(100000); // 数组长度影响:100000——28ms,500——12ms
auto iter = set_intersection(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),num.begin());
num.resize(iter-num.begin());
vector<int>::iterator iter1 = unique(num.begin(),num.end());
num.erase(iter1,num.end());
return num;
}
};
2.2直接遍历去重:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
vector<int> num(1000),result;// 同上,数组长度影响:100000——28ms,(500、1000等)——12ms
auto iter = set_intersection(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),num.begin());
num.resize(iter-num.begin());
int len = num.size();
for(int i = 0;i<len;i++){
if(! result.empty() && num[i]==result.back())
continue;
result.push_back(num[i]);
}
return result;
}
};
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 =
[1, 2, 2, 1], nums2 =
[2, 2], return
[2].
Note:
Each element in the result must be unique.
The result can be in any order.
1、先排序,再用两指针分别扫描两数组(12ms)
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> num;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int i = 0,j = 0;
while(i<nums1.size() && j < nums2.size()){
if(nums1[i] == nums2[j] && find(num.begin(),num.end(),nums1[i]) == num.end()){
num.push_back(nums1[i]);
i++;
j++;
continue;
}
if(nums1[i]<nums2[j])
i++;
else
j++;
}
return num;
}
};
2、发现STL中有set_intersection()函数,是对于排好序后的两个集合(即不会有重复元素)求交集,因此这里调用该函数的话,会有重复元素出现。
2.1利用unique、erase去重:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
vector<int> num(100000); // 数组长度影响:100000——28ms,500——12ms
auto iter = set_intersection(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),num.begin());
num.resize(iter-num.begin());
vector<int>::iterator iter1 = unique(num.begin(),num.end());
num.erase(iter1,num.end());
return num;
}
};
2.2直接遍历去重:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
vector<int> num(1000),result;// 同上,数组长度影响:100000——28ms,(500、1000等)——12ms
auto iter = set_intersection(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),num.begin());
num.resize(iter-num.begin());
int len = num.size();
for(int i = 0;i<len;i++){
if(! result.empty() && num[i]==result.back())
continue;
result.push_back(num[i]);
}
return result;
}
};
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解