Leetcode: 只出现一次的数字

给定一个整数数组,除了某个元素外其余元素均出现两次。请找出这个只出现一次的元素。

 备注:

你的算法应该是一个线性时间复杂度。 你可以不用额外空间来实现它吗?

1.利用异或的特点,

自己与自己异或为0:a ⊕ a = 0

结合律:a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c

所以题目可以简化为:(a1⊕a1a2⊕a2⊕....)⊕a单=0⊕a单=a单

class Solution:
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        ans=0
        for item in nums:
            ans^=item
        return ans

2.异或总结:

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。

1. a ⊕ a = 0 #自己与自己异或为0
2. a ⊕ b = b ⊕ a #满足交换律
3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;#满足结合律
4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
5. a ⊕ b ⊕ a = b.#由1和3可以推出来

3.异或运算的应用

1)指定位取反:与0异或不变,与1异或取反;

 假设有01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行异或运算

2)交换两个值,不用临时变量
  将a和b的值互换,可以用以下赋值语句实现:
  a = a∧b;
  b = b∧a;

  a = a∧b;

##

变型题目:

一个数组存放若干整数,一个数出现奇数次,其余数均出现偶数次,找出这个出现奇数次的数?

一个整型数组里除了两个数字之外,其他的数字都出现了两次?


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值