algorithm - 给定一个整数数组,其中一些数字重复 1 次或 2 次,但有一个数字重复 3 次,你如何找到它?

标签 algorithm

给定一个整数数组,其中一些数字重复 1 次,一些数字重复 2 次,只有一个数字重复 3 次,你如何找到重复 3 次的数字。不允许使用哈希。算法的复杂度应该是O(n)

最佳答案

我假设数组没有排序,或者类似地,一个数字的重复不会出现在一个连续的运行中。否则,问题真的很微不足道:只需使用大小为 3 的窗口扫描数组一次,如果该窗口中的每个数字都相同,那么这就是在一次连续运行中重复 3 次的数字。

如果重复是分散的,那么问题就变得更有趣了。

因为这是作业,所以我只会给你一个提示。

这个问题与给定一个未排序整数数组的问题类似,所有数字出现偶数次,除了一个出现奇数次。

通过对数组中的所有数字执行异或操作,可以很容易地在 O(N) 中找到该数字;结果是出现奇数次的数字。

之所以可行,是因为 x xor x = 0

例如,3 xor 4 xor 7 xor 0 xor 4 xor 0 xor 3 = 7

关于algorithm - 给定一个整数数组,其中一些数字重复 1 次或 2 次,但有一个数字重复 3 次,你如何找到它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2497470/

相关文章:

java - 我如何知道算法是在 O(n) 时间内运行还是在 O(nlogn) 内运行?

javascript - 使用质因数分解找到数字的最小公倍数(如何模拟素数表)

algorithm - 斯卡拉 : Sorting list of number based on another list

algorithm - 为什么 QuickSort 不擅长对几乎已排序的数据进行排序

algorithm - 从图形中获取主线

algorithm - 是否有任何算法可以将图像投影到非平面上?

python - Python 中的页面排名

algorithm - 将元组转换为树

algorithm - 有限数量的 worker 需要一种新的项目管理算法

image - bwboundaries 获取图像边界