zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    

      

  • 相关阅读:
    [题解] [JSOI2011] 任务调度
    [题解] [JSOI2011] 棒棒糖
    [题解] [JSOI2011] 柠檬
    [题解] [JSOI2010] 排名
    [湖南集训] 谈笑风生
    BZOJ 4695 最假女选手 线段树
    HNOI 2010 物品调度 并查集 置换
    Luogu P4299 首都 LCT
    BZOJ 2738 矩阵乘法 整体二分
    51nod 1175 区间第k大 整体二分
  • 原文地址:https://www.cnblogs.com/CodingGirl121/p/5542565.html
Copyright © 2011-2022 走看看