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;
        }
    };
    

      

  • 相关阅读:
    java小提示:标示符常见命名规则、常用ASCII
    java程序练习:数组中随机10个数中的最大值
    java第四课:数组
    java程序练习:x进制转Y进制
    java第三课:分支结构、循环结构
    java第二课:运算符和表达式
    java第一课:环境、变量、数据类型
    00
    linux 设备驱动 nand驱动框架
    linux内核源码分析plat-form 分析
  • 原文地址:https://www.cnblogs.com/CodingGirl121/p/5542565.html
Copyright © 2011-2022 走看看