zoukankan      html  css  js  c++  java
  • 【力扣】两个数组的交集

    两种情况 一种带重复数字 一种不带重复数字

    不带重复数字

    使用hashset 添加nums1自动去重  遍历nums2看在hashset中是否存在
    再用一个hashset保存结果
     public int[] Intersection(int[] nums1, int[] nums2) {
                HashSet<int> nums = new HashSet<int>();
                HashSet<int> result = new HashSet<int>();
                for(int i = 0; i < nums1.Length; i++)
                {
                    nums.Add(nums1[i]);
                }
                for(int i = 0; i < nums2.Length; i++)
                {
                    if (nums.Contains(nums2[i]))
                    {
                        result.Add(nums2[i]);
                        nums.Remove(nums2[i]);
                    }
                }
                return result.ToArray();
            
    
        }

    带重复数字

     两种方法 

    第一种方法和上面类似, 使用Dictionary,key值为nums1的值,value为元素的个数

    遍历nums2,如果在dictionary中有且个数大于0,存到result里,个数减一

    public int[] Intersect(int[] nums1,int[] nums2)
            {
                if (nums1 == null || nums2 == null || nums1.Length == 0 || nums2.Length == 0)
                {
                    return new int[] { };
                }
                //调整nums1为小数组
                if (nums1.Length > nums2.Length)
                {
                    int[] temp = nums1;
                    nums1 = nums2;
                    nums2 = temp;
                }
                for (int i = 0; i < nums1.Length; i++)
                {
                    Console.WriteLine(nums1[i]);
                    Console.WriteLine("=");
                }
                for (int i = 0; i < nums2.Length; i++)
                {
                    Console.WriteLine(nums2[i]);
                    Console.WriteLine("-");
                }
    
                Dictionary<int, int> dic = new Dictionary<int, int>();
                for(int i = 0; i < nums1.Length; i++)
                {
                    if (dic.ContainsKey(nums1[i]))
                    {
                        dic[nums1[i]]++;
                    }
                    else
                    {
                        dic.Add(nums2[i], 0);
                    }
                }
                List<int> result= new List<int>();
                for(int i = 0; i < nums2.Length; i++)
                {
                    if (dic.ContainsKey(nums2[i]) && dic[nums2[i]] >= 0)
                    {
                        result.Add(nums2[i]);
                        dic[nums2[i]]--;
                    }
                   
                }
                return result.ToArray();
               
    
            }

    第二种方法 排序 双指针法

    i指向nums1 j指向nums2

            Array.Sort(nums1);
                Array.Sort(nums2);
                int i = 0, j = 0;
                List<int> result = new List<int>();
                while (i < nums1.Length && j < nums2.Length)
                {
                    if (nums1[i] < nums2[j])
                    {
                        i++;
                    }
                    else if(nums1[i]>nums2[j])
                    {
                        j++;
                    }
                    else
                    {
                        result.Add(nums1[i]);
                        i++;
                        j++;
                    }
                }
                return result.ToArray();
  • 相关阅读:
    (转)Dynamic Web project转成Maven项目
    (转)nodejs搭建本地http服务器
    jquery mobile validation
    Quartz任务调度快速入门(转)
    珠宝首饰
    免费素材:25套免费的 Web UI 设计的界面元素(转)
    WebUI框架
    超越大典汽车维修系统
    如何申请开通微信多客服功能
    微信开发者文档连接
  • 原文地址:https://www.cnblogs.com/h-jang/p/12575844.html
Copyright © 2011-2022 走看看