我接受了 Facebook 的采访,他们问了我这个问题。
假设您有一个具有 N 个不同值的无序数组
$输入 = [3,6,2,8,9,4,5]
实现一个查找第 K 个最大值的函数。
EG:如果 K = 0,则返回 9。如果 K = 1,则返回 8。
我做的就是这个方法。
private static int getMax(Integer[] input, int k)
{
List<Integer> list = Arrays.asList(input);
Set<Integer> set = new TreeSet<Integer>(list);
list = new ArrayList<Integer>(set);
int value = (list.size() - 1) - k;
return list.get(value);
}
我刚刚测试过,该方法根据问题运行良好。不过,受访者表示,in order to make your life complex! lets assume that your array contains millions of numbers then your listing becomes too slow. What you do in this case?
作为提示,他建议使用min heap
. 根据我的知识,堆的每个子值不应超过根值。因此,在这种情况下,如果我们假设 3 是根,那么 6 是它的子节点,并且它的值大于根的值。我可能错了,但是您的想法是什么以及它的实现基于min heap
什么?