• [leetcode-350-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?

    思路:

    用一个map去记录nums1里的数字出现次数,再去遍历nums2,统计是否出现过。

    vector<int> intersect(vector<int>& nums1, vector<int>& nums2)
         {
             vector<int>ret;
             map<int, int>mp;
             for (auto a : nums1)mp[a]++;
             for (auto a:nums2)
             {
                 if (mp[a] > 0)
                 {
                     mp[a]--;
                     ret.push_back(a);
                 }
             }
             return ret;
         }

    还有一种办法就是将nums1和nums2分别从小到大排序,然后用两个指针分别从头开始比较。

    nums1[i]如果小于nums[j]就将i+1,如果大于就将j+1,如果相等同时+1,并记录。

    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
            sort(nums1.begin(), nums1.end());
            sort(nums2.begin(), nums2.end());
            int n1 = (int)nums1.size(), n2 = (int)nums2.size();
            int i1 = 0, i2 = 0;
            vector<int> res;
            while(i1 < n1 && i2 < n2){
                if(nums1[i1] == nums2[i2]) {
                    res.push_back(nums1[i1]);
                    i1++;
                    i2++;
                }
                else if(nums1[i1] > nums2[i2]){
                    i2++;
                }
                else{
                    i1++;
                }
            }
            return res;
        }

     参考:

    https://discuss.leetcode.com/topic/45893/c-hash-table-solution-and-sort-two-pointers-solution-with-time-and-space-complexity

  • 相关阅读:
    单例模式 2中创建方法
    Interger 与 int
    java equals 和 "==" 比较
    java 小知识点
    对象复制、克隆、深度clone
    onsubmit="return false;"报错
    js 在myeclipse中报错
    struts2 标签 --<<s:url >
    struts2 标签问题----日期显示
    mysql 建表语句
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/7138155.html
Copyright © 2020-2023  润新知