class Solution
{
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2)
{
unordered_map<int, int> hashMap;
for (auto num : nums1)
{
hashMap[num]++;
}
vector<int> result;
for (auto num : nums2)
{
if (hashMap.find(num) != hashMap.end() && hashMap[num] > 0)
{
result.push_back(num);
hashMap[num]--;
}
}
return result;
}
};
Follow up
What if the given array is already sorted? How would you optimize your algorithm?
假设按照升序排列,设置两个指针i,j分别指向数组num1,num2,之后对两个指针所指的元素进行比较,若num1[i]=num2[j],则该数为交集,push进结果数组,若num1[i]>num2[j],则j指针向后移动,若num1[i]< num2[j],则i指针向后移动。
What if nums1’s size is small compared to nums2’s size? Which algorithm is better?
若排好序,则使用排好序的算法,若未排序,则使用map的算法。
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?
使用上面的map即可完成。