【题目描述】
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?
感觉比349更简单,因为这次纯粹是求两个数集的交集,不用考虑是否元素重复,follow up里的第三个子问题还是比较有意义的,从discuss里看到的回答,感觉不错
Q:
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?
A:
-
If only nums2 cannot fit in memory, put all elements of nums1 into a HashMap, read chunks of array that fit into the memory, and record the intersections.
-
If both nums1 and nums2 are so huge that neither fit into the memory, sort them individually (external sort), then read 2 elements from each array at a time in memory, record intersections.
【代码】
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
int len1=nums1.size();
int len2=nums2.size();
vector<int> ans;
if(len1==0||len2==0) return ans;
int i=0,j=0;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
while(i<len1&&j<len2){
// while(i<len1-1 && nums1[i]==nums1[i+1]) i++;
//while(j<len2-1 && nums2[j]==nums2[j+1]) j++;
if(nums1[i]==nums2[j]){
ans.push_back(nums1[i]);
i++;
j++;
}
else{
if(nums1[i]<nums2[j]) i++;
else j++;
}
}
return ans;
}
};