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】哈希集

posted @ 2020-05-15 09:24  翠果不是果果  阅读(87)  评论(0编辑  收藏  举报