# 剑指offer40. 最小的k个数

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、88个数字,则最小的4个数字是1、2、3、4

输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]

输入:arr = [0,1,2,1], k = 1
输出:[0]
1
2
3
4
5

# 解答

  • 自己的答案
/**
 * @param {number[]} arr
 * @param {number} k
 * @return {number[]}
 */
var getLeastNumbers = function(arr, k) {
    let result = arr.slice(0,k)
    let restArr = arr.slice(k)
    let restMax = Math.max(...result)
    let maxIndex = 0
    for(let num of restArr) {
        if(num < restMax) {
            maxIndex = result.indexOf(restMax)
            result.splice(maxIndex,1,num)
            restMax = Math.max(...result) 
        }
    }
    return result
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  • 排序
// ac地址:https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/
// 原文地址:https://xxoo521.com/2020-02-21-least-nums/

/**
 * @param {number[]} arr
 * @param {number} k
 * @return {number[]}
 */
var getLeastNumbers = function(arr, k) {
    return arr.sort((a, b) => a - b).slice(0, k);
};
1
2
3
4
5
6
7
8
9
10
11