1. 题目
2. 思路
(1) 快速排序
- 利用快速排序对数组进行排序,若选取的pivot正好落在下标为k的位置上,则可以提前返回。
3. 代码
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
sort(input, 0, input.length - 1, k);
ArrayList<Integer> res = new ArrayList<>();
for (int i = 0; i < k; i++) {
res.add(input[i]);
}
return res;
}
public void sort(int[] arr, int left, int right, int k) {
if (left < right) {
int low = left;
int high = right;
int pivot = arr[low];
while (low < high) {
while (low < high && arr[high] >= pivot) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] <= pivot) {
low++;
}
arr[high] = arr[low];
}
arr[low] = pivot;
if (low == k) {
return;
}
sort(arr, left, low - 1, k);
sort(arr, low + 1, right, k);
}
}
}