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.知识点
快速排序 找到基准值之后,对所有元素排序
 
总结
快排,冒泡 选择 堆排 希尔 归并










