python-不重复的两个数

1 .问题描述 给定一个数组 a[] ,其中除了 2 个数,其他均出现 2 次,请找到不重复
2 个数并返回。
2 .问题示例
给出 a=[1 2 5 5 6 6] ,返回 [1 2] ,除 1 2 外其他数都出现
2 次,因此返回 [1 2] 。给出 a=[3 2 7 5 5 7] ,返回 [2 3] ,除
2 3 其他数都出现了 2 次,因此返回 [2 3]
3 .代码实现
##本题旨在将十进制数转化为二进制数来进行相应的按位与,按位异或运算
class Solution:

    def thenumber(self,a):
        ans = [0,0]
        for i in a: ##列表中两个相同的数按位异或为零,
            ans[0] = ans[0]^i  ##这样可以找出列表中不重复的数按位异或的结果
        c = 1
        while c & ans[0] != c: ##先判断ans[0]是奇数还是偶数,奇数等于1且等于自身,否则0
            c = c << 1
        for i in a:
            if i & c == c:  ##c二进制有两种情况:01或者10
                ans[1] = ans[1]^i
        ans[0] = ans[1]^ans[0]
        return ans

if __name__ == "__main__":
    s = Solution()
    nums = [3,2,7,5,5,7]
    print(s.thenumber(nums))


            

4 .运行结果
输入:
[3,2,7,5,5,7]
输出:
[2, 3]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值