0
点赞
收藏
分享

微信扫一扫

LeetCode 剑指 Offer 40. 最小的k个数

夹胡碰 2022-04-01 阅读 36

LeetCode 剑指 Offer 40. 最小的k个数

文章目录

题目描述

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。

输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]

最小的k个数
提示:


一、解题关键词


二、解题报告

1.思路分析

2.时间复杂度

log(n)

3.代码示例

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){
        //终止递归
        if(left >= right){return;}
        int i = left,j = right;
        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;
    }
}

2.知识点

快速排序 找到基准值之后,对所有元素排序


总结

快排,冒泡 选择 堆排 希尔 归并

举报

相关推荐

0 条评论