【发布时间】:2015-06-11 03:57:40
【问题描述】:
IntStream 可能是最简单的方法,但我只能选择最小的 M 数字,如下所示:
public class Test {
private static final int[] arr = {5, 3, 4, 2, 9, 1, 7, 8, 6};
public static void main(String[] args) throws Exception {
System.out.println(Arrays.asList(IntStream.of(arr).sorted().limit(5).boxed().toArray()));
}
}
顺便说一句,考虑到算法复杂度并假设 N >> M,“排序 + 限制”方法的复杂度仅为 O(N log(N))。
我认为最好的复杂度可能达到 O(N log(M)) 但我不知道 Java 8 是否有这种流方法或收集器。
【问题讨论】:
-
IntStream.of(arr).sorted().skip(N-M).boxed()应该这样做。 -
相关(从昨天开始):stackoverflow.com/questions/30740471/…
-
找到另一个相关的:stackoverflow.com/questions/19227698/… 但是Java中似乎没有现有的方法。
-
快速选择算法或相关选择算法在 O(N) 时间内进行部分排序。 en.wikipedia.org/wiki/…
-
我认为比算法时间复杂度更重要的是内存复杂度。使用 N >> M 如果 N 中间存储,您只需要 M 而不是。
标签: java algorithm java-8 java-stream