给定一个非常大的整数数组,其中元素可以达到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)
。