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