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.知识点
快速排序 找到基准值之后,对所有元素排序
总结
快排,冒泡 选择 堆排 希尔 归并
该博客探讨了如何利用快速排序算法有效地找出整数数组中最小的k个数。文章介绍了具体思路,通过快速排序算法实现,时间复杂度为log(n),并提供了详细的代码示例。此外,还强调了在解决此类问题时,快速排序的优势。
810

被折叠的 条评论
为什么被折叠?



