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()(拒绝采样,学!!!)

[剑指 Offer 40]. 最小的 k 个数

[剑指 Offer 40]. 最小的 k 个数

快排堆排归并优化快排优化堆排,✨5种方式教你秒解——>力扣17.14. 最小K个数

最小的k个数(剑指offer 40)

最小的k个数