面试题 17.14. 最小K个数
解题思路
取数据前K项. 首先想到的就是排序. 所以用快排排序后取前K项 即符合题目要求
代码
var smallestK = function (arr, k) {
const len = arr.length
if (len < k) return arr
const sort = (l, r) => {
if (l >= r) return
let piv = l
let idx = piv + 1
for (let i = idx; i <= r; i++) {
if (arr[piv] > arr[i]) {
;[arr[idx], arr[i]] = [arr[i], arr[idx]]
idx++
}
}
;[arr[piv], arr[idx - 1]] = [arr[idx - 1], arr[piv]]
sort(l, idx - 2)
sort(idx, r)
}
sort(0, len - 1)
return arr.slice(0, k)
}