我有一个大小为n的未排序整数数组,我想从中打印出最小的t元素。
例如,如果我有以下数组:
int[] input = {5,6,2,5,7,8,9,1,22,64,3,4}
int t = 5;
然后我的结果应该是:
result = {1,2,3,4,5}
请求的代码:
Arrays.sort(input);
for(int i = 0; i <= t; i++) {
System.out.println(input[i]);
}
目前,我是如何使用Arrays.sort()对数组进行排序,然后迭代前几个术语来打印它。这解决了O(nlgn)中的问题。但是,如果我有一个足够大的数组(n> 1000),那么对整个事物进行排序以获得t个元素似乎是不好的做法(假设t远小于n)。
我想知道Java中是否有其他数据结构可以更高效地完成它?也许是线性探测数组并创建一个较小的t数组并用原始数组中最小的t元素填充它的东西,利用一些检查?
我正在研究优先级队列或MinHeap,但我不确定它是否解决了我遇到的问题,即在比O(nlgn)时间更好的情况下解决它。
你们有什么想法吗?