Java,从数组中查找第 K 个最大值
我接受了Facebook的采访,他们问了我这个问题。
假设您有一个具有 N 个不同值的无序数组
$input = [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);
}
我刚刚测试过,根据问题,该方法工作正常。然而,受访人说,作为提示,他建议使用。据我所知,堆的每个子值不应超过根值。因此,在这种情况下,如果我们假设3是根,那么6是它的子级,它的值比根的值更粗糙。我可能错了,但你的想法是什么,它的实现基于什么?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
min heap