Leetcode——最小的K个数(快排)
Posted Yawn,
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode——最小的K个数(快排)相关的知识,希望对你有一定的参考价值。
1. 最小的K个数
(1)快排
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
quickSort(arr, 0, arr.length - 1);
return Arrays.copyOf(arr, k);
}
private void quickSort(int[] arr, int left, int right) {
// 子数组长度为 1 时终止递归
if (left >= right) return;
// 哨兵划分操作,选择pivot用作基准,将最左边值与pivot交换位置
int i = left, j = right;
int pivot = left + (int) (Math.random() * (right - left + 1));
swap(arr, pivot, left);
while (i < j) {
while (i < j && arr[j] >= arr[left]) j--;
while (i < j && arr[i] <= arr[left]) i++;
swap(arr, i, j);
}
swap(arr, i, left);
// 递归左(右)子数组执行哨兵划分
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
private void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
以上是关于Leetcode——最小的K个数(快排)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 面试题 17.14. 最小K个数(堆排,快排)/剑指 Offer 10- I. 斐波那契数列 /470. 用 Rand7() 实现 Rand10()(拒绝采样,学!!!)