zoukankan      html  css  js  c++  java
  • leetcode350 两个数组的交集 II (Easy)

    题目来源:leetcode350 两个数组的交集 II

    题目描述:

    给定两个数组,编写一个函数来计算它们的交集。

    示例 1:

    输入:nums1 = [1,2,2,1], nums2 = [2,2]
    输出:[2,2]

    示例 2:

    输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出:[4,9]
     
    说明:

    输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
    我们可以不考虑输出结果的顺序。

    进阶:
    如果给定的数组已经排好序呢?你将如何优化你的算法?
    如果 nums1 的大小比 nums2 小很多,哪种方法更优?
    如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

    解题思路:

    方法一:用哈希表记录出现的次数

    class Solution {
    public:
        vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
            vector<int> ans;
            map <int,int > m;
            for(auto num:nums1)
                m[num]++;
            for(auto num:nums2){
                if(m.count(num)!=0&&m[num]>0){
                    ans.push_back(num);
                    m[num]--;
                }
            }
            return ans;
        }
    };
    

    方法二:排序+双指针

    class Solution {
    public:
        vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
           vector<int> ans;
           if(nums1.empty()||nums2.empty()) return ans;
           sort(nums1.begin(),nums1.end());
           sort(nums2.begin(),nums2.end());
           int i=0,j=0;
           while(i<nums1.size()&&j<nums2.size()){
               if(nums1[i]==nums2[j]){
                   ans.push_back(nums1[i]);
                   i++;
                   j++;
               }
               else if(nums1[i]<nums2[j]) {
                   i++;
               }
               else j++;
           }
           return ans;
        }
    };
    
  • 相关阅读:
    MasterPage中找尋控件
    Win2003服务器发布的网站Session经常丢失
    Toolkits
    aspnet_regiis 命令格式說明
    SQL转换数字中文大写
    ASP.NET2.0实现无刷新客户端回调
    SQL的使用规范
    pku3207 2SAT问题入门
    unity3d打包资源
    Vector3.Lerp 插值
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13365558.html
Copyright © 2011-2022 走看看