LeetCode-Interview40-最小的k个数
Posted Edwin Xu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-Interview40-最小的k个数相关的知识,希望对你有一定的参考价值。
题目描述
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
我的题解
暴力排序
把数组升序排好,取出最前的k个即可,很暴力,比较低效, 仅适合与k接近与数组长度。
//java 8ms
public int[] getLeastNumbers(int[] arr, int k) {
Arrays.sort(arr);
int [] res = new int[k];
for (int i=0;i<k;i++){
res[i]=arr[i];
}
return res;
}
有限排序
想法是只找出k个最小数,不要对其他的数进行排序
//效率还是不行,比上面全排序还差,这个排序算法需要改进!
public int[] getLeastNumbers(int[] arr, int k) {
int len = arr.length;
int [] res = new int[k];
for (int i=0;i<k;i++){
int min = arr[i];
int minIndex=i;
for (int j=i+1;j<len;j++){
if (arr[j]<min){
min = arr[j];
minIndex=j;
}
}
if (minIndex!=i) arr[minIndex]=arr[i];
res[i]=min;
}
return res;
}
以上是关于LeetCode-Interview40-最小的k个数的主要内容,如果未能解决你的问题,请参考以下文章