有一个n个数字的数组.一个数字重复n/2次,其他n/2个数字不同

tib*_*ama 3 c++ arrays programming-languages

有一个n个数字的数组.一个数字重复n/2次,其他n/2个数字不同.找到重复的数字.(最佳soln是o(n)正好n/2 + 1比较.)

这里的主要问题是n/2 + 1比较.我有两个O(n)的解决方案,但他们正在进行超过n/2 + 1的比较.

1>将数组的数量除以三个组.比较任何相同元素的n/3组.例如,数组是(1 10 3)(4 8 1)(11)....因此所需的比较数是7,即> n/2 + 1,即8/2 + 1 = 5

2>比较a [i]和[i + 1]和[i + 2]例如阵列是8 10 3 4 1 1 1 1

总共9次比较

我甚至感激一点帮助.谢谢

空间复杂度为O(1).

Luk*_*hne 10

当然,如果所有其他都不同,你只需比较所有对.如果你找到一对两个相同的数字,你就有了这个数字

假设你有这样的数字(它只是关于索引)

[1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)

然后你做这样的n/2 + 1比较

(1,2),(3,4),(5,6),(7,8),(9,7),(9,8)
Run Code Online (Sandbox Code Playgroud)

如果所有对都不同,则返回10.

那么当你比较最后4个剩余的数字(7,8,9,10)时,你知道其中至少有两个相同的数字并且你有3个比较.