设计一个O(n)算法,找出一个不在[0,n-1]范围内的数字

时间:2014-09-11 10:01:56

标签: arrays algorithm integer

数组A在n-1中包含range [0,n-1]个唯一整数,也就是说,此范围内的一个数字不在A中。设计O(n)算法以查找该数字。除阵列A本身外,您只能使用O(1)个额外空间。

任何人都可以提供帮助?

2 个答案:

答案 0 :(得分:3)

将数字从0加到n-1,然后找到数组的总和,缺少的数字是sum - 数组之和

说明:如果0 + 1 + 2 + ... + n-1总和,并且数组除了一个之外还有所有这些数字,所以当你添加到0 + 1 + 2 + ... + n-1时数组中带有“ - ”前缀的数字,每个数字都将取消他的“+”对应物,因此你将留下“+”,它在数组中没有对应物,因此这是缺少的数字

注意:存储一个数字是log(n)位,但在大多数地方(我见过)他们不会以比特分辨率说话并且存储一个数字是O(1)空间,所以它取决于你在问题中的定义方式

答案 1 :(得分:0)

给定0-99范围内具有随机排序的唯一整数的 a (大小100)和 b (大小99)。

a = RandomSample[Range[0, 99]]
b = Take[RandomSample[Range[0, 99]], 99]

b 中找到缺少的元素。

element = Total[a]-Total[b]

使用的语言是Mathematica。