python 按位运算符

2019-12-03  本文已影响0人  聪民

刷leetcode刷到一道题,看到discussions里面有一个挺聪明的解法,记录一下。

136. Single Number
Given anon-emptyarray of integers, every element appearstwiceexcept for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input:[2,2,1]Output:1
Example 2:
Input:[4,1,2,1,2]Output:4

我的方法是用字典保存了所有出现过的数字出现的次数,取value为1的那一个。

import collections
class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        d = collections.Counter(nums)
        for key in d:
            if d[key] == 1:
                return key

按位运算符:python的位运算符是基于其数值化为二进制的0 1bit后再进行的运算;需要注意的是其返回结果为10进制形式。

^:按位异或运算符,相同取1,不同取0;
~:按位取反运算符,0变为1,1变为0;
|:按位或运算符,1和0组合为1,纯0或纯1为0;
&:按位与运算符,只有全是1的时候才为1,只要有一个0为0。

于是就可以写成这样

def singleNumber(self, nums):
    res =0
    for num in nums:
        res ^= num
return res

上一篇下一篇

猜你喜欢

热点阅读