算法思路
题目要求数组中最小的K个数,很明显我们可以先对数组进行从小到大排序,然后输出前K个数即可;排序算法介绍参考#排序#,这里我们选择快速排序来实现。
算法实现
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
quickSort(input, 0, input.length - 1);
ArrayList<Integer> result = new ArrayList<>();
for (int i = 0; i < k; i++) {
result.add(input[i]);
}
return result;
}
// 快速排序算法实现
private void quickSort(int[] A, int p, int r) {
if (p < r) {
int q = partition(A, p, r);
quickSort(A, p, q - 1);
quickSort(A, q + 1, r);
}
}
private int partition(int[] A, int p, int r) {
int x = A[r];
int i = p - 1;
for (int j = p; j < r; j++) {
if (A[j] <= x) {
swap(A, ++i, j);
}
}
swap(A, i + 1, r);
return i + 1;
}
private void swap(int[] A, int i, int j) {
if (A[i] != A[j]) {
A[i] ^= A[j];
A[j] ^= A[i];
A[i] ^= A[j];
}
}
} 
京公网安备 11010502036488号