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
这个需要仔细理解,reduce的第三个参数的含义是初始值,reduce(operator.xor, xrange(len(nums) + 1))是先对所有值做一遍异或,在用这个结果去和数组做异或,就能得出缺少的值了。
这个方法有点吊,直接求和减去原数组就是缺少的那个值了。
例:给定数组[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)
这个方法有点吊,直接求和减去原数组就是缺少的那个值了。
相关文章推荐
- 268. Missing Number
- [leetcode]: 268. Missing Number
- LeetCode *** 268. Missing Number
- LeetCode 268. Missing Number(缺失数字)
- 268. Missing Number
- Leetcode 268. Missing Number
- 2018.03.15 leetcode 打卡 #268. Missing Number
- 268. Missing Number
- 268. Missing Number
- 【leetcode】268. Missing Number
- leetcode- 268. Missing Number
- 268. Missing Number多种解法
- Leetcode 268. Missing Number (Medium) (cpp)
- 268. Missing Number
- 268. Missing Number
- 【Leetcode】268. Missing Number
- [leetcode]-268. Missing Number(C语言)
- 2018.03.15 leetcode 打卡 #268. Missing Number
- Leetcode ☞ 268. Missing Number
- 268. Missing Number