java - 获取 double 组的最大 k 个元素

标签 java arrays sorting

我面临的问题是这个:

我有一个 double 数组,我想从中保留前 k 个更大的值。

  1. 我见过一些涉及Arrays.sort 的实现。例如在 this example对于相关问题,建议使用这种方法。
  2. 因为我只对前 k 元素感兴趣,所以我还尝试了 MinMaxPriorityQueue。我已经创建了一个带有 maximumSizeMinMaxPriorityQueue:

当然还有自动装箱。

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/

相关文章:

java - Libgdx 输入在 Android 上不起作用

Java JFileChooser 后退按钮

java - 如何使用 java 使用 .net Web 服务

python - 为什么没有桶排序库(或者有?)

java - MappingMongoConverter setMapKeyDotReplacement 不起作用

javascript - 无法使用 FlotJs 绘制 2 个单独的图表

javascript - 合并数组和切换

PHP - 创建动态多维文件树数组

c# - 按最低数字出现的次数对列表进行排序

javascript - 按键值递归排序 JavaScript 对象