[leetcode]#136. Single Number

来源:互联网 发布:芙莉西亚之虫惑魔淘宝 编辑:程序博客网 时间:2024/06/08 17:38
  • 题意分析:
      给定一个数组,每个数都出现了2次,只有一个出现了一次,找出这个数。要求时间复杂度O(n),空间复杂度O(1)。

  • 题目思路:
      这道题目利用位操作。位操作的异或(^),他的其中一个属性是,n^n = 0, 0^n = n。只要将所有的数都进行异或就得到出现一次的数。

  • 根据以下几个原则:
    1)a ^ a = 0
    2)a ^ b ^ a = b ^ a ^ a = b ^ (a ^ a) = b ^ 0 = b
    交换律 结合律
  • 由于异或运算的性质,两个相同数字的亦或等于0,而任意数字与0的亦或都等于它本身
class Solution(object):    def singleNumber(self, nums):        """        :type nums: List[int]        :rtype: int        """        ans = 0        for i in nums:            ans ^= i        return ans