• Leetcode题目: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 num2'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) {
            sort(nums1.begin(), nums1.end());
            //vector<int>::iterator end_unique =  unique(nums1.begin(), nums1.end()); 
           // nums1.erase(end_unique, nums1.end());
            sort(nums2.begin(),nums2.end());
           // end_unique =  unique(nums2.begin(), nums2.end()); 
            //nums2.erase(end_unique, nums2.end());
            vector<int>::iterator nit1 = nums1.begin();
            vector<int>::iterator nit2 = nums2.begin();
            vector<int> res;
            while((nit1 != nums1.end())  && (nit2 != nums2.end()) )
            {
                if(*nit1 == *nit2)
                {
                    res.push_back(*nit1);
                    nit1++;
                    nit2++;
                }
                else if(*nit1 < *nit2)
                {
                    nit1++;
                }
                else
                {
                    nit2++;
                }
                
            }
        return res;
        }
    };
    

      

    考虑到Followup中提到的,对nums2进行排序不太好,使用哈希来编码实现,代码如下:

    class Solution {
    public:
        vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
            unordered_map<int, int> num_map;
            vector<int> res;
            for(auto nit = nums1.begin(); nit != nums1.end(); nit++)
            {
                num_map[*nit] += 1;
            }
            for(auto nit = nums2.begin(); nit != nums2.end(); nit++)
            {
                if(num_map[*nit] >= 1)
                {
                    num_map[*nit] -= 1;
                    res.push_back(*nit);
                }
                
            }
            return res;
        }
    };
    

      

  • 相关阅读:
    ArrayList removeRange方法分析
    LinkedHashMap源码分析(基于JDK1.6)
    LinkedList原码分析(基于JDK1.6)
    TreeMap源码分析——深入分析(基于JDK1.6)
    51NOD 2072 装箱问题 背包问题 01 背包 DP 动态规划
    51 NOD 1049 最大子段和 动态规划 模板 板子 DP
    51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子
    8月20日 训练日记
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/CodingGirl121/p/5542565.html
Copyright © 2020-2023  润新知