剑指Offer_28 发表于 2017-12-03 | 分类于 剑指Offer 题目输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 解题思路快速排序 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152import java.util.ArrayList;public class Solution { private void quickSort(int []A, int lo, int hi){ if(lo >= hi){ return ; } int pivot = partition(A, lo, hi); quickSort(A, lo, pivot-1); quickSort(A, pivot+1, hi); } private int partition(int []A, int lo, int hi){ int pivot = lo; int i = lo; int j = ++hi; for( ; ; ){ //边界条件的判断 while(i < hi && A[++i] < A[pivot]){} while(j > lo && A[--j] > A[pivot]){} if(i >= j){ break; } swap(A, i, j); } swap(A, pivot, j); return j; } private void swap(int []A, int i, int j){ int t = A[i]; A[i] = A[j]; A[j] = t; } public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> list = new ArrayList<>(); if(input == null || input.length < k){ return list; } quickSort(input, 0, input.length-1); for(int i = 0; i < k; ++i){ list.add(input[i]); } return list; } }