描述
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组
示例1
输入:[4,5,1,6,2,7,3,8],4
返回值:[1,2,3,4]
分析:
先使用快速排序法进行排序,再取前k个数。
代码:
import java.util.ArrayList;
public class Solution {
@SuppressWarnings("unchecked")
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList ans = new ArrayList();
if(input.length < k) return ans;
int len = input.length;
QuickSort(input,0,len-1);
for(int i = 0;i < k;i++){
ans.add(input[i]);
}
return ans;
}
public void QuickSort(int[] arr,int left,int right){
if(left >= right) return;
int p = Partition(arr,left,right);
QuickSort(arr,left,p-1);
QuickSort(arr,p+1,right);
}
public int Partition(int[] arr,int left,int right){
int pivot = arr[right];
int len = right - left + 1;
int index = left - 1;
for(int i = left;i < len;i++){
if(arr[i] < pivot){
index++;
Swap(arr,i,index);
}
}
index++;
Swap(arr,index,right);
return index;
}
public void Swap(int[] arr,int i,int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
提交结果:答案正确 运行时间:15ms 占用内存:9932KB 使用语言:Java 用例通过率:100.00%