• 算法题:int 数组中 只有一个是id 只出现一次 其他都出现2次 怎么找出只出现一次的id


    首先讲一个最笨的算法:时间复杂度为N  空间复杂度为N

    代码如下:输出结果id=3完全正确;    

                int[] a = new int[] { 1, 1, 2, 2, 3, 4, 4 };
                Dictionary<int, int> dic = new Dictionary<int, int>() { };
                 for (int i = 0; i < a.Length; i++)
                {
                    if(dic.Keys.Contains(a[i]))
                    {
                        dic[a[i]]++;
                    }
                    else
                    {
                        dic.Add(a[i], 1);
                    }
                }
                int id=dic.FirstOrDefault(s => s.Value == 1).Key;         
           
    

      再来一种时间复杂度为N 空间复杂度为1的。

                List<int> arr = new List<int> { 1, 1, 2, 2, 3, 4, 4 };
                List<int> arrnew = new List<int>();
                for (int i = 0; i < arr.Count; i++)
                {
                    if(arrnew.Contains(arr[i]))
                    {
                        arrnew.Remove(arr[i]);
                    }
                    else
                    {
                        arrnew.Add(arr[i]);
                    }
                }
    
                 id = arrnew[0];    
    

      

    再来个最佳算法:异或来做。(0异或任何数都为本身,相等的数异或为0,异或支持结合律)

                int[] arr = new int[] {1,1,2,2,3,4,4 };
                var m=0;
                for(int i=0;i<arr.Length;i++)
                {
                    m = m ^ arr[i];
                }
    

      m=3;

    完美解决问题

                                                                                                      

  • 相关阅读:
    《计算机网络 自顶向下方法》 第1章 计算机网络和因特网
    记一次代码优化
    不要刻意寻求局部最优解
    Eclipse Jetty插件安装
    Jetty的工作原理
    log4g 使用教程
    有用资料的网址
    Java 编程 订单、支付、退款、发货、退货等编号主动生成类
    Spring框架
    Eclipse常用快捷键大全1
  • 原文地址:https://www.cnblogs.com/youngharvard/p/10535446.html
Copyright © 2020-2023  润新知