输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
思路:建立一个大小为K的数组,然后遍历这N个整数,当前数组元素个数小于k,直接加入,如果当前元素大于K,比较当前数和数组中的最大的数,保留小的舍弃大的。
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
ArrayList<Integer> list = new ArrayList();
//判断空输入
if(input == null || k > input.length)
return list;
int count = 0;
int max = Integer.MIN_VALUE; //当前最大数字
for(int i = 0; i < input.length ; i++){
//如果数组没满
if(count < k){
list.add(input[i]);
count++;
}else if(count == k){
//如果数组满了,找出最大的一个和当前数字相比较
max = getMax(list);
if(max > input[i]){
//如果当前数字比较小,替换那个大的
removeNumber(list,max);
list.add(input[i]);
max = getMax(list);
}
}
}
return list;
}
public int getMax(ArrayList<Integer> list){
int max = Integer.MIN_VALUE;
for(Integer temp : list){
if(temp > max)
max = temp;
}
return max;
}
public void removeNumber(ArrayList<Integer> list,int number){
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
if(number == iterator.next()){
iterator.remove();
break;
}
}
}
}