本文章已收录于:
作者同类文章
X
版权声明:本文为博主原创文章,未经博主允许不得转载。
题目描述:给出一个包含 0 .. N 中 N 个数的序列,找出0 .. N 中没有出现在序列中的那个数。
样例:N = 4 且序列为 [0, 1, 3] 时,缺失的数为2。
之前,有一道找寻第一个丢失的正整数(详见:点击打开链接)的问题。当时用的是桶排序(详见:点击打开链接)
这题题呢,其实和上一道题没有本质不同了,完全可以用相同的方法解决。但是更简单,为什么呢?因为所有数组中可能出现的元素的范围已经确定了。
但是桶排序的方法就这道题本身而言,有点“杀鸡用牛刀”了,完全不用那么复杂。
因为数组缺失的数肯定是0-N中的一个,而数组所有的元素都是0-N中,除了缺失的数之外的其他数构成的。所以最简单的思路是对数组求和,再根据等差数列的求和公式对0-N求和,后面的和减去前面的和就行。
代码如下:
class Solution:
# @param nums: a list of integers
# @return: an integer
def findMissing(self, nums):
n = len(nums)
i = 0
sum_value = 0
while i != n:
sum_value += nums[i]
i += 1
return n * (n + 1) / 2 - sum_value
# write your code here
如果不用数学的方法,循环也能解决:
class Solution:
# @param nums: a list of integers
# @return: an integer
def findMissing(self, nums):
n = len(nums)
i = 0
sum_value = 0
while i != n:
sum_value -= nums[i]
sum_value += i
i += 1
return sum_value + n
# write your code here算的东西结果是一样的。
题目
在线测试本题
解题报告
给出一个包含 0 .. N 中 N 个数的序列,找出0 .. N 中没有出现在序列中的那个数。
在线测试本题
http://www.lintcode.com/zh-cn/problem/find-the-missing-number/
解题报告
这道题类似桶排序问题,如果不能用额外的空间的话,那么其实只需要从0开始遍历到n-1,每次当A[i]!= i的时候,将A[i]与A[A[i]]交换,大于边界的话,丢掉就可以了,直到无法交换位置。 如果有发现 A[i]始终不等于A[A[i]]。那么i就是first missing number
本文介绍了一种高效查找数组中缺失数字的方法。通过对比数组求和与等差数列求和,快速定位缺失值。同时提供了两种不同的实现方式,并讨论了在不使用额外空间的情况下的解决方案。
2295

被折叠的 条评论
为什么被折叠?



