【解题思路】
新建一个长度为k的数组ans,将数组arr的前k个数字加入到ans中。后面没遍历arr中的一个数字,找到当前ans中最大的数字,如果arr[i]小于ans中最大的数字,则替换掉。最终ans中的k个数字即为arr中最小的k各数。
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
int[] ans = new int[k];
int cnt = 0;
int max = -99999;
int maxcnt = -1;
for(int i = 0; i < arr.length; i++)
{
if(cnt < k)
{
ans[cnt] = arr[i];
cnt++;
}
else if(arr[i] < max)
{
ans[maxcnt] = arr[i];
}
max = -99999;
maxcnt = -1;
for(int j = 0; j < k; j++)
{
if(ans[j] > max)
{
max = ans[j];
maxcnt = j;
}
}
}
return ans;
}
}