您的位置:首页 > 其它

Missing Number

2016-09-23 08:58 239 查看
leetcode第268题,找出连续数字序列中的缺失项。

一开始看错题意了,以为是有序数组,写了半天才发现不是,于是就排了个序,虽然AC了,但是很明显时间复杂度已经超过了线性时间,因为有排序操作。

这里还要考虑首尾两端缺失的情况,所以比较繁琐。

def missingNumber(nums):

n = len(nums)
nums.sort()
if nums[n-1] != n:
return n
if nums[0] != 0:
return 0
for i in range(1,n):
if nums[i-1]+1 != nums[i]:
return nums[i-1]+1

如果在线性时间内完成且不能开辟其它空间,遍历数组已不可能,所以可以想办法找出题目的要求,题目要求是连续空间,因此可以先算出原始的加和,减去当前给定的数组序列加和,就可以完成任务了,而且不用考虑首尾的问题,对原数组的加和是线性时间,原始加和可以通过等差数列通项公式得出。
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
sum1 = sum(nums)
n = len(nums)
sum2 = (n*(n+1))/2
return sum2-sum1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: