刷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
网友评论