剑指offer:27最小的k个数
自己选择的路、跪着也要把它走完。
题目描述
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数 字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组
题目解析:
先选择一种排序算法将数组排序,之后将所需要的数存入一个集合中, 返回集合即可。这里选择的冒泡排序,如果数据量很大时, 冒泡排序不适用于这里。
核心代码:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> res = new ArrayList<Integer>();
if(k>input.length){
return new ArrayList<Integer>();
}
for(int i = 0;i<input.length;i++){
boolean flag = false;//优化代码的关键
for(int j = 0;j<input.length-i-1;j++){
if(input[j]>input[j+1]){
int temp = input[j];
input[j] = input[j+1];
input[j+1] = temp;
flag = true;
}
}
if(!flag){
break;
}
}
for(int i = 0;i<k;i++){
res.add(input[i]);
}
return res;
}
}