您的位置:首页 > 其它

268. Missing Number

2016-11-07 21:56 155 查看
题意是给定一个包含不同连续数字的数组,找出其中缺少的那个,注意数组可以使乱序的。

例:给定数组[0, 1, 3],返回2。

易错点:这题第一眼就想到用异或的方法,异或其实有一种保存位的功能,而且连续数的异或是有规律的。

比如:00^01^10^11=00,同时利用相同数的异或结果为0这个条件,可以多构建一个数组,来求出缺少的值,比如:

N1∧N2∧N3∧N2∧N3=(N2∧N2)∧(N3∧N3)∧N1=(0)∧(0)∧N1=N1

class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
return reduce(operator.xor, nums, \
reduce(operator.xor, xrange(len(nums) + 1)))


这个需要仔细理解,reduce的第三个参数的含义是初始值,reduce(operator.xor, xrange(len(nums) + 1))是先对所有值做一遍异或,在用这个结果去和数组做异或,就能得出缺少的值了。

class Solution2(object):
def missingNumber(self, nums):
return sum(xrange(len(nums)+1)) - sum(nums)


这个方法有点吊,直接求和减去原数组就是缺少的那个值了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: