我面临的问题是这个:
我有一个 double
数组,我想从中保留前 k
个更大的值。
- 我见过一些涉及
Arrays.sort
的实现。例如在 this example对于相关问题,建议使用这种方法。 - 因为我只对前
k
元素感兴趣,所以我还尝试了MinMaxPriorityQueue
。我已经创建了一个带有maximumSize
的MinMaxPriorityQueue
:
当然还有自动装箱。
Builder<Comparable> builder = MinMaxPriorityQueue.maximumSize(maximumSize);
MinMaxPriorityQueue<Double> top2 = builder.create();
问题是顺序是升序的,与我想要的顺序相反。所以我不能这样使用它。
为了说明问题的实际参数,我的数组大约有 50
个元素长,我对最多 k = 5
个元素感兴趣。
那么有没有办法使用第二种方法绕过这个问题呢?即使我真的不需要对所有元素进行排序,我是否应该留在第一个?您知道速度性能是否存在显着差异(我将不得不在很多情况下使用它,所以这就是需要速度的地方)?我可以使用任何其他解决方案吗?
至于性能,我知道理论上我可以自己检查,但我有点没时间,如果有人有任何解决方案,我很乐意听到(或无论如何阅读)。
最佳答案
如果您只有大约 50 个元素,如我评论中所述,只需对其进行排序并取出最后的 k
元素。只有 2 行:
public static double[] largests(double[] arr, int k) {
Arrays.sort(arr);
return Arrays.copyOfRange(arr, arr.length - k, arr.length);
}
这会修改(排序)原始数组。如果你希望你的原始数组不被修改,你只需要 +1 行:
public static double[] largests2(double[] arr, int k) {
arr = Arrays.copyOf(arr, arr.length);
Arrays.sort(arr);
return Arrays.copyOfRange(arr, arr.length - k, arr.length);
}
关于java - 获取 double 组的最大 k 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802052/