您的位置:首页 > 其它

给出一个包含 0 .. N 中 N 个数的序列,找出0 .. N 中没有出现在序列中的那个数。

2016-05-17 15:03 381 查看

寻找缺失的数

标签:
数组   http://blog.csdn.net/guoziqing506/article/details/51436082 2016-05-17 15:03
160人阅读 评论(0)
收藏
举报

本文章已收录于:


分类:
lintcode(167)




作者同类文章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算的东西结果是一样的。

 
题目
http://chuansong.me/n/1722705

给出一个包含 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

简介九章算法,帮助更多中国人找到好工作!九章算法,团队成员均为硅谷和国内顶尖IT企业工程师。提供算法培训、面试咨询、求职内推。目前培训的程序员遍布中国、美国、加拿大、澳大利亚、英国、新加坡等12个国家和地区。目前开设课程有九章算法班、系统设计班、BAT国内班、九章算法强化班。更有Java
/ ios / C++等即将开课。更多详情,登录www.jiuzhang.com,或致信info@ninechapter.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: