给定一个非常大的整数数组,其中元素可以达到10 ^ 9,我如何找到一个具有最大值和值的对。
我现在的方法是计算所有可能的对,并遍历它并找到最大值,但是它非常慢。
还有别的办法吗?

最佳答案

只要你能找到至少两个具有相同最高有效位集的数字,解决方案将涉及其中的两个。
接下来,丢弃所有其他元素,并移除此MSB中所有未丢弃的数字,并解决同一问题直到你只剩下两个号码或者什么也没做。
例如:

 input  || first iteration | second iteration
=================================================================
1110010 ||       x         |        x
0110111 ||   discarded     |    discarded
1000000 ||       x         |    discarded
1000010 ||       x         |        x
=================================================================
=> solution: first and last

这是O(n log max_element)

10-08 13:18