LeetCode 350. 两个数组的交集 II

题目描述: 两个数组的交集 II

给定两个数组,写一个方法来计算它们的交集。

例如:
给定 nums1 = [1, 2, 2, 1]nums2 = [2, 2], 返回 [2, 2].

注意:

  •    输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
  •    我们可以不考虑输出结果的顺序。

解题思路:

        这种交集可以考虑用映射map来解决,映射的value即次数,value=0即集合中没有该数。

        注意:没有初始化的key所映射的value默认为0.

代码:

class Solution {
public:
    vector intersect(vector& nums1, vector& nums2) {
        map m;
        vector v;
        for(int i = 0; i < nums1.size(); i ++) {
            m[nums1[i]]++;
        }
        for(int i = 0; i < nums2.size(); i ++) {
            if(m[nums2[i]]) {
                v.push_back(nums2[i]);
                m[nums2[i]]--;
            }
        }
        return v;
    }
};

跟进:

  • 如果给定的数组已经排好序呢?你将如何优化你的算法?

class Solution {
public:
    vector intersect(vector& nums1, vector& nums2) {
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
        if(nums1.size() > nums2.size()) 
            swap(nums1, nums2);
        vector v;
        int n = 0,i = 0;
        while(n < nums1.size()){
            for(;i < nums2.size()&&nums2[i] < nums1[n]; i ++);
            if(nums2[i] == nums1[n]) v.push_back(nums2[i++]);
            n++;
        }
        return v;
    }
};
  • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
        对nums2用二分查找。
  • 如果nums2的元素存储在磁盘上,内存是有限的,你不能一次加载所有的元素到内存中,你该怎么办?

        这个不太懂


你可能感兴趣的:(LeetCode,简单题)