• 136只出现一次的数字


    题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
    要求:线性时间复杂度,最好不用额外空间。

    1.位运算:异或

    Time:O(n)

    异或运算性质:

    • 任何数和0做异或运算,结果仍然是原来的数,即 a⊕0=a。
    • 任何数和其自身做异或运算,结果是 00,即 a⊕a=0。
    • 异或运算满足交换律和结合律,即a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
    #python
    class Solution:
          def singleNumber(self,nums):
                return lambda(x,y:x^y,nums)
    

    2.Hash集

    Time:O(n)
    哈希集:不包含任务重复元素的无序集合

    //java
    class Solution{
          public int singleNumber(int[] nums){
                Map<Integer,Integer> map = new HashMap<>();
                for(Integer i : nums){
                      Integer count = count == null ? 1 : ++count;
                      map.put(i,count); 
                }
                for(Integer i : map.keySet()){
                      count = map.get(i);
                      if(count == 1){
                            return i;
                      }
                }
                return -1; //没找到
          }     
          
    }
    

    3.快排

    Time:O(nlog(n))

    相关链接:

    【1】排序
    【2】哈希集

  • 相关阅读:
    手把手教您玩转信用卡 如何“以卡养卡”合法“套现”
    267家已获第三方许可机构名单查询
    C#生成图片验证码
    File I/O
    文件上传代码
    集合框架
    接口
    多态
    封装
    jsp做成mvc模式的代码
  • 原文地址:https://www.cnblogs.com/centralpark/p/12892950.html
Copyright © 2020-2023  润新知