个人评价:快排,没啥多说的,用内置函数有何不可?何必那么卷
题目难度:🌟 (参考 LeeCode 简单🌟 、中等🌟 🌟 、困难🌟 🌟 🌟 )
另,通常算法题会考察分析时间复杂度和空间复杂度,可参考笔者之前的文章
最小的k个数
题目描述
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
示例 1:
输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]
示例 2:
输入:arr = [0,1,2,1], k = 1
输出:[0]
限制:
0 <= k <= arr.length <= 10000 0 <= arr[i] <= 10000
解题思路
典型的快排,Go 内置 sort 本身就是优化后的排序,为何不用呢 😁
func getLeastNumbers(arr []int, k int) []int {
sort.Ints(arr)
return arr[:k]
}
总结
与其考察手写快排,不如说下 Go 中 sort 包实现吧?回到起点的第一篇有提到哦
sort 包会根据实际数据自动选择高效的排序算法 🐂
sort 包实现了四种基本排序算法:插入排序、归并排序、堆排序和快速排序。 但是这四种排序方法是不公开的,它们只被用于 sort 包内部使用。
有时间的 TX 可以深入看下源码,排序的注释很清晰明了,还加了复杂度说明 👍
可用作排序算法的代码示例 (^U^)ノ~YO
上述题解,对
[]int
切片排序更常使用 sort.Ints(),时间复杂度 O(nlogn) (快排)