[LeetCode] 面试题 17.14. 最小K个数

67 阅读1分钟

面试题 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)
}