题目要求
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组。
思路
求出当前数组的最小值后,将最小值所在位置的值设为MAXNUM,然后继续求下一个最小值。时间复杂度为O(k*n),空间复杂度为O(1)。
代码实现(Python)
import java.util.ArrayList;
public class Solution {
private final int MAXNUM = Integer.MAX_VALUE;
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
if (k > input.length){
return new ArrayList<>();
}
int minIndex = 0;
ArrayList<Integer> res = new ArrayList<>();
while (k-->0){
minIndex = getMinIndex(input);
res.add(input[minIndex]);
input[minIndex] = MAXNUM;
}
return res;
}
private int getMinIndex(int[] input){// 返回最小值所在的下标
int i = 0;
int minIndex = 0;
for (;i<input.length;i++){
if (input[i]<input[minIndex]){
minIndex = i;
}
}
return minIndex;
}
}