设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
提示:
0 <= len(arr) <= 100000
0 <= k <= min(100000, len(arr))
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/smallest-k-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
最朴素的暴力:
class Solution {
public int[] smallestK(int[] arr, int k) {
int[] ans = new int[k];
int max = Integer.MIN_VALUE, maxIndex = -1;
//初始化ans,并获取当前ans中的最大值及最大值的下标
for (int i = 0; i < k; i++) {
ans[i] = arr[i];
if (ans[i] > max) {
max = ans[i];
maxIndex = i;
}
}
for (int i = k; i < arr.length; i++) {
//当数组中元素比ans中的最大值小时,替换ans的最大值
if (arr[i] < max) {
ans[maxIndex] = arr[i];
max = Integer.MIN_VALUE;
//重新查找ans的最大值及最大值index
for (int j = 0; j < k; j++) {
if (ans[j] > max) {
max = ans[j];
maxIndex = j;
}
}
}
}
return ans;
}
}