将大小为10000的数组中的2个位置清零,填充从1到10000的整数。您如何找出这些值是什么?

时间:2011-06-29 19:22:59

标签: algorithm

  

可能重复:
  Easy interview question got harder: given numbers 1..100, find the missing number(s)

如果您有一个大小为10000的数组,填充了1到10000之间的整数,没有重复,并且您将该数组中的两个位置设置为0.您如何弄清楚这两个数字是什么?

例如: Array = {8,6,3,5,4,2,7,1}; //为了简单起见,数组填充了1到8之间的数字。

数组[0] = 0; 阵列[1] = 0;

数组[0]和数组[1]的位置是什么?

如果问题只是将一个位置归零,那么问题就很容易了。你可以得到1到8之间的数字之和,它是36,并且当你在一个位置为零之后将数组中的所有数字相加时,它会从你得到的总和中减去它。

这不是作业问题。但我想我记得在大学时被问过这个问题。

4 个答案:

答案 0 :(得分:4)

您可以使用常量内存和1个数组查找来解决您的问题:

  1. 您可以找到归零数字的总和 - 通过计算所有数字的总和减去剩余数字的总和
  2. 您可以通过类似方式找到归零数字的平方和(只需谨慎选择可以容纳足够大值的数字类型)。
  3. 现在你有2个方程的系统,有2个变量(x + y == sum1和x * x + y * y == sum2),可以很容易地解决。

答案 1 :(得分:2)

我认为这应该有效,并且比搜索每个数字更有效:
- 所有的数字
- 设置二到0
- 找到新的总和
- 找出差异的所有因素
- 根据数组中的数字,查看哪些因子是可能的,因为没有重复...

例如:
Array = {8,6,3,5,4,2,7,1}; //为了简单起见,数组中填充了从1到8的数字 阵列[0] = 0;
阵列[1] = 0;

原始总和= 36
新总和= 28
差异= 8
总和为8:7 / 1,6 / 2,5 / 3,4 / 4的对 检查6/2,看到6和2都在那里,排除那对。继续,直到找到一对数字仍未在数组中。这是你的答案。在这种情况下,数组中仍然没有7或1,因此这是缺少的两个数字。

答案 2 :(得分:2)

您可以创建一个数字从1到10000的集合,遍历数组并从集合中删除您在数组中遇到的每个数字。在数组的末尾,您的集合应该有两个被删除的数字。

答案 3 :(得分:1)

您无法知道阵列特定位置的归零数字是什么,但您可以通过找到丢失的nos来了解这两个数字。在你的号码。集。