![]() |
1
104
把所有的数字加起来,然后减去如果只使用1001个数字的话你所期望的总数。 如:
|
![]() |
2
77
更新2: 有些人认为使用xor来查找重复的数字是一种技巧。对此,我的官方回应是:“我不是在寻找一个重复的数字,我是在寻找一个重复的模式在一系列的位集。而xor绝对比add更适合操作位集”。-) 更新: 为了好玩,在我睡觉之前,这里有一个“单行”的替代解决方案,它不需要额外的存储空间(甚至不需要循环计数器),只接触每个数组元素一次,是非破坏性的,根本不可扩展:-)
注意,编译器实际上会在编译时计算该表达式的后半部分,因此“算法”将在1002个操作中执行。 如果在编译时也知道数组元素的值,编译器会将整个语句优化为一个常量。-) 原始解决方案: 这不符合问题的严格要求,即使它能找到正确的答案。它使用一个额外的整数来保持循环计数器,并且它三次访问每个数组元素-两次在当前迭代中读取和写入它,一次在下一次迭代中读取它。
除此之外,这里还有一个破坏性的算法,可以安全地扩展到任何n到max_int。
我会给你留下一个简单的提示,让你弄清楚为什么这样做:
|
![]() |
3
22
弗朗西佩诺夫的非破坏性解决方案。
这可以通过使用
假设我们有一个数组大小
现在做一个
此解决方案的最佳特性是,它不会遇到基于加法的解决方案中出现的溢出问题。
由于这是一个面试问题,最好从基于加法的解决方案开始,确定溢出限制,然后给出
这将使用一个附加变量,因此不能完全满足问题中的要求。 |
![]() |
4
15
把所有的数字加在一起。最后的总和是1+2+…+1000+个重复数。 |
![]() |
5
6
套用弗朗西斯·佩诺夫的解决方案。 通常的问题是:给定一个任意长度的整数数组,该数组只包含重复次数为偶数的元素,除了重复次数为奇数的一个值外,求出该值。 解决办法是:
你现在的问题是适应。诀窍是你要找到重复两次的元素,所以你需要调整解决方案来弥补这个怪癖。
这就是弗朗西斯的解决方案最终所做的,尽管它破坏了整个数组(顺便说一句,它只能破坏第一个或最后一个元素…) 但是由于索引需要额外的存储空间,我认为如果您也使用一个额外的整数…这种限制很可能是因为他们想阻止您使用数组。
如果他们要求的话,措辞会更准确
|
![]() |
6
5
加上所有数字。整数1..1000的和是(1000*1001)/2。和你得到的不同是你的号码。 |
![]() |
7
3
如果你知道我们有精确的数字1-1000,你可以把结果加起来减去
|
![]() |
8
2
有一个很简单的方法…1到1000之间的每一个数字只出现一次,除了重复的数字…所以,1…1000的总和是500500。所以,算法是: sum = 0 for each element of the array: sum += that element of the array number_that_occurred_twice = sum - 500500 |
![]() |
9
2
python中的单行解决方案
解释其工作原理 @Matthieu M.'s answer . |
![]() |
10
1
|
![]() |
11
1
|
![]() |
12
1
没有额外的存储需求(除了循环变量)。
|
![]() |
13
1
参数和调用堆栈算作辅助存储吗?
编辑:尾部调用版本
|
![]() |
14
1
|
![]() |
15
0
三角形数t(n)是从1到n的n个自然数之和,可以表示为n(n+1)/2。因此,知道在给定的1001个自然数中,只有一个数是重复的,就可以很容易地求出所有给定数的和并减去t(1000)。结果将包含此副本。 对于一个三角形数t(n),如果n是10的任意幂,也有一种基于基-10表示的求t(n)的漂亮方法:
|
![]() |
16
0
我支持将所有元素相加,然后从中减去所有索引的和,但是如果元素的数量很大,这就不起作用。也就是说,它将导致整数溢出!所以我设计了这个算法,它可以在很大程度上减少整数溢出的机会。
但通过这种方法,我将无法找出重复元素所在的索引! 为此,我需要另一次遍历数组,这是不可取的。 |
![]() |
17
0
基于连续值异或性质对fraci答案的改进:
哪里:
或者在伪代码/数学语言f(n)中定义为(优化):
标准形式f(n)是:
|
![]() |
18
0
我对问题2的回答:
求1-(到)n的和和和和
找出1-n-x-y中数字的和和和积(假设x,y不存在),比如mysum,myprod, 因此:
因此:
如果解这个方程,我们可以找到x,y。 |
![]() |
19
0
在aux版本中,首先将所有值设置为-1,并在迭代时检查是否已将值插入到aux数组。如果不是(则值必须为-1),则插入。如果你有副本,这是你的解决方案! 在没有aux的情况下,从列表中检索一个元素,并检查列表的其余部分是否包含该值。如果里面有,就在这里找到了。
|
![]() |
Toniq · javascript为php保存多维数组 1 年前 |
|
Jannis · Java中数组的怪异行为 1 年前 |
|
callum · 如何识别数组中与给定序列不匹配的元素? 1 年前 |
![]() |
tenfour · 如何使用数组元素的索引初始化数组元素 2 年前 |
![]() |
Guillaume · 使用操作从Python列表创建numpy数组 2 年前 |
![]() |
maxMas · Swift 5:为什么会出现索引超出范围错误? 2 年前 |