【问题标题】:Array containing n-2 integers 1 to n, O(n) algorithm to find missing 2 numbers with O(1) extra space? [duplicate]包含n-2个整数1到n的数组,O(n)算法用O(1)额外空间找到丢失的2个数字? [复制]
【发布时间】:2012-09-26 04:52:09
【问题描述】:

可能重复:
Find two missing numbers

我想了一会儿,似乎无法得到答案......所以一个数组,除了空间之外,还有一个在 1 到 n 范围内的 n-2 个唯一整数和 O(1) 空间给定数组使用的。如何在 O(n) 时间内找到数组中缺失的从 1 到 n 的两个整数?

例如,a = [4,3,1,6] 和 O(1) 额外空间 如何在 O(n) 时间内找到 2、5?

【问题讨论】:

标签: arrays algorithm sorting


【解决方案1】:

这里有一个想法:只需保留一些统计数据即可为您提供有关缺失数字的信息。例如,如果您将所有数字的总和计算为 S,那么:

(1+2+..+N) - S = a+b

其中 a 和 b 是您缺少的数字。在您的示例中,您得到:

1+2+3+4+5+6 - 4+3+1+6 = 7 = a+b

然后你也可以做同样的事情,例如,乘法和得到:

(1*2*..*N) / S = a*b

在你的情况下:

(1*2*3*4*5*6) / 72 = 10 = a*b

所以答案是 2 和 5。

基本上你可以通过这种方式使用很多统计数据...

【讨论】:

  • 这个想法很有趣,但是你怎么知道缺少哪些数字,比如说 a + b = 7。(a, b) 可能是 (1, 6) 或 (3, 4)?
  • @Krypton 因为你也有给你第二个约束的产品,所以 a*b=10,因为 1*6=6 和 3*4=12 答案必须是 2*5 ...
  • 1*2*3*....*n 不是O(1) 空间,也不是O(N) 时间。整数运算为O(1) 空间和时间的假设对于重复乘法是失败的,因为:1 * 2 * ... * N = N! 要表示N!,您将需要O(N*log(N)) 位。因此,即使忽略整数的O(log(N)) 位(这通常是一个假设),您也不能忽略N 因素
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2012-01-02
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多