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();
  • 相关阅读:
    cors
    js 离开页面
    移动端 touch
    eclipse
    java获取classpath以外的路径
    Javascript类型转换的规则
    myeclipse开发安装C++
    MyEclipse10中配置开发Python所需要的PyDev 绝对靠谱 不忽悠!
    POI生成EXCEL,公式不自动执行的有关问题
    POI中设置Excel单元格格式样式(居中,字体,边框等)
  • 原文地址:https://www.cnblogs.com/h-jang/p/12575844.html
Copyright © 2011-2022 走看看