题目描述:
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
解题思路:
首先具有两种情况的特殊情况,第一种是数组长度等于k,返回整个数组的元素即可;第二种数组长度小于k,返回空即可;正常情况下,使用treemap来储存每个数组元素出现的次数,且key值升序排列,故可以在最后遍历treemap时,将最小的k个数字返回。
代码(java):
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer>res=new ArrayList<Integer>();
//特殊情况之数组长度和k相同
if(k==input.length){
for(int i=0;i<k;i++){
res.add(input[i]);
}
return res;
}
//特殊情况之数组长度小于k
if(k>input.length){
return res;
}
//一般情况,数组长度大于k
TreeMap<Integer,Integer> tmap=new TreeMap<Integer,Integer>();
for(int i=0;i<input.length;i++){
if(tmap.keySet().contains(input[i])){
tmap.put(input[i],tmap.get(input[i])+1);
}
else{
tmap.put(input[i],1);
}
}
for(int val:tmap.keySet()){
int t=Math.min(k,tmap.get(val));
for(int i=0;i<t;i++){
res.add(val);
}
k-=t;
if(k<=0)break;
}
return res;
}
}