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

      

  • 相关阅读:
    挖矿病毒入侵-分析总结
    Linux查看包依赖关系的神器-repoquery分享
    Elasticsearch 字段为空(null)记录查询
    Python 导数 Elasticsearch 元数据到CSV
    基于docker快速构建MySQL主从复制环境
    Redis环境简单部署(集群/双机)
    FTP 脚本 to Shell脚本&bat脚本&python脚本
    专用服务器模式&共享服务器模式
    CentOS 7安装部署ELK 6.2.4-SUCCESS
    zabbix 数据库迁移变更
  • 原文地址:https://www.cnblogs.com/CodingGirl121/p/5542565.html
Copyright © 2011-2022 走看看