题目描述:
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3] return 2.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
题目大意:
给定一个包含从0, 1, 2, ..., n, 选出的n个不同数字的数组,从中找出数组中缺失的那一个数。
例如,
给定 nums = [0, 1, 3] 返回2。
注意:
你的算法应该满足线性时间复杂度。你可以只使用常数空间复杂度完成此题吗?
解题思路:
解法I:等差数列前n项和 - 数组之和
Python代码:
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
return n * (n + 1) / 2 - sum(nums)
解法II:位运算(异或运算)
Python代码:
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
a = reduce(operator.xor, nums)
b = reduce(operator.xor, range(len(nums) + 1))
return a ^ b
本文链接:http://bookshadow.com/weblog/2015/08/24/leetcode-missing-number/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。
_Astray_ 发布于 2015年8月24日 20:24 #
很好的博客每天都更新
在线疯狂 发布于 2015年8月25日 11:23 #
欢迎常来看看 :)
traceformula.blogspot.com 发布于 2015年9月2日 14:51 #
My python:
class Solution(object):
def missingNumber(self, nums):
r = 0
for i in range(len(nums)):
r ^= i ^ nums[i]
return r ^ len(nums)
URL: http://traceformula.blogspot.com/2015/09/missing-number-leetcode.html
okwap 发布于 2015年9月13日 12:52 #
為何是用n * (n + 1) / 2 而不是 https://upload.wikimedia.org/math/2/0/a/20a19b4e5511d45a905b0405b44ddfc8.png ?
在线疯狂 发布于 2015年9月13日 17:32 #
首项a1 = 1,末项an = n,公差d = 1,项数为n
okwap 发布于 2015年9月13日 22:20 #
這我知道,但我不瞭解的是,這個公式為何可以套用在首項不為1的Given nums = [0,1,3]
在线疯狂 发布于 2015年9月13日 23:49 #
题意是说从0 - n这n+1个数中找出缺失的那1个,如果把首项看作0,末项,公差不变,项数变成n+1,结果依然是n*(n+1)/2
okwap 发布于 2015年9月14日 09:29 #
懂,感謝指導!