Intersection of Two Arrays II两个数组交集(重要!)
https://leetcode.com/problems/intersection-of-two-arrays-ii/
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1], nums2 = [2,
2], return [2, 2].
Note:
- Each element in the result should appear as many times as it shows in both arrays.
- The result can be in any order.
Follow up:
- What if the given array is already sorted? How would you optimize your algorithm?
- What if nums1"s size is small compared to nums2"s size? Which algorithm is better?
- What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
if (nums1.size() == 0 || nums2.size() == 0){
return res;
}
unordered_map<int,int> m;
for (int n : nums1){
m[n]++;//注意利用map这种索引取值的特性
}
for (int n : nums2){
if (m.count(n) && m[n] > 0){
res.push_back(n);
m[n]--;
}
}
return res;
}
};现在回答
- What if the given array is already sorted? How would you optimize your algorithm?
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
if (nums1.size() == 0 || nums2.size() == 0){
return res;
}
int i1 = 0, i2 = 0;
while (i1 < nums1.size() && i2 < nums2.size()){
if (nums1[i1] == nums2[i2]){
res.push_back(nums1[i1]);
i1++; i2++;
}
else if (nums1[i1] < nums2[i2]){
i1++;
}
else{
i2++;
}
}
return res;
}
};声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: MSSQL、MySQL 数据库删除大批量千万级百万级数据的优化
- 下一篇:没有了
