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
我认为最好的复杂性可能达到O(N log(M)),但我不知道Java 8是否有这种流方法或收集器。
如果您已经在项目中使用google guava,您可以利用MinMaxPriorityQueue:
Collection<..> min5 = stream.collect(
toCollection(MinMaxPriorityQueue.maximumSize(5)::create)
);
EJP是对的,我对它进行了测试-当输入值为2时,得到8和9。
import java.util.stream.IntStream;
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 {
int n = Integer.parseInt(args[0]);
System.out.println("Finding "+n+" largest numbers in arr");
IntStream.of(arr).sorted().skip(arr.length-n).boxed().forEach(big -> System.out.println(big));
}
}
如果必须使用流:
IntStream.of(arr).sorted().skip(N-M)
否则,使用优先级队列(PriorityQueue)并编写一个反向比较器(inversing Comparator)。插入为O(N(log(N)),移除M个元素为O(M(log(N))。不是你想要的,但可能足够近了。
我有一个数组,我需要三个数中最大的一个数和各自的索引值。我有一个这样的数组: 如何找到最大的数字及其索引值?
给定一个从1到n的序列,我想找到所有大小为m的唯一子序列,求和到n。子序列不需要是连续的。例如 到目前为止,我已经能够使用递归生成所有的子序列,但我的代码并不是只返回唯一的子序列,结果中有一些重复的子序列。 当用 结果是 正如您所看到的,{3,2}是{2,3}的副本。我如何改变我的代码,使它只返回唯一的序列?
我试图学习分布式计算,并遇到了一个寻找大量数字的中位数的问题: 假设我们有一大组数字(假设元素数为 N*K),它们无法放入内存(大小为 N)。我们如何找到这些数据的中位数?假设在内存上执行的操作是独立的,即我们可以考虑有K台机器,每台机器最多可以处理N个元素。 我认为中位数可以用于这个目的。我们可以一次将N个数装入内存。我们在< code>O(logN)时间内找到该集合的中值,并保存它。 然后我们
问题内容: 如果不使用数组,我可以得到最大的数组,但是无法获得最小的数组。 最小的代码。 问题答案:
问题内容: 有什么简单的方法或功能可以确定python列表中的最大数量?我只可以编写代码,因为我只有三个数字,但是如果我可以使用内置函数或类似的东西告诉最大的代码,那么它将使代码的冗余度降低很多。 问题答案: 关于什么
问题内容: 想知道如何编写SQL函数以查找表中的第N个最大元素,如果没有第N个最大元素,则返回Null。 使用MySQL / MySQL工作台。 顺便说一句,我的问题与第N个最高薪水问题不同,因为我还有一个附加要求,如果第N个最大元素不存在,则返回Null。任何想法表示赞赏。 预先感谢林 问题答案: 您可以这样做: