返回信息流一个数组num[n]; n为已知数,可能很大
数组中的数大小为0~n,且不重复,因此数组中包含0~n这n+1个数中的n个
要求找出数组中没有的那个数
显然排序后查找可以满足,但是时间为O(nlgn)
想知道有没有更快的方法,n可能很大,所以空间占用不能太大,要求至少小于O(n)
这是一条镜像帖。来源:北邮人论坛 / cpp / #32828同步于 2009/12/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
一个算法问题
DarkIce
2009/12/6镜像同步55 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 DarkIce 的大作中提到: 】
: 一个数组num[n]; n为已知数,可能很大
: 数组中的数大小为0~n,且不重复,因此数组中包含0~n这n+1个数中的n个
: 要求找出数组中没有的那个数
: ...................
o(n)可以解决,不过空间也是o(n)
不知道谁还有更好的解法
【 在 he1l0 的大作中提到: 】
: 先把一个变量,比如m赋值为0~n,n+1个数的xor,再去xor数组里的每个元素,最后得到的就是缺的那个,嗯,好象是这样
你这个最坏时间复杂度都o(n^2)
任取x
a = x;
for i <- 0 to n+1
x ^= i
for i <- 0 to n
x ^= num[i]
x ^= a
此时x = 缺少的数
时间复杂度O(n),空间复杂度O(1),用xor是怕溢出,本意是用+法,求0~n,n+1个数的和,在把数组中的每个数减去,得到的就是缺的那个数
【 在 jmpesp 的大作中提到: 】
: 你这个最坏时间复杂度都o(n^2)
扩展性差点 题目变成缺失两个数 如何?
【 在 he1l0 的大作中提到: 】
: 先把一个变量,比如m赋值为0~n,n+1个数的xor,再去xor数组里的每个元素,最后得到的就是缺的那个,嗯,好象是这样
【 在 he1l0 的大作中提到: 】
: 时间复杂度O(n),空间复杂度O(1),用xor是怕溢出,本意是用+法,求0~n,n+1个数的和,在把数组中的每个数减去,得到的就是缺的那个数
哦,我理解错了,学习一下~~