算法列表

最小的k个数 (159.库存管理) 简单

布莱克2026-03-31 17:49分治

问题:

仓库管理员以数组 stock 形式记录商品库存表,其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量,返回 顺序不限

示例 1:

输入:stock = [2,5,7,4], cnt = 1
输出:[2]

示例 2:

输入:stock = [0,2,3,6], cnt = 2
输出:[0,2] 或 [2,0]

回答:

var inventoryManagement = function(stock, cnt) {
    return partition(stock, 0, stock.length - 1, cnt)
};
var partition = function(stock, left, right, cnt) {
    if (left >= right) {
        return stock.slice(0, cnt)
    }
    let pivot = left + Math.floor(Math.random() * (right - left + 1));
    let pivotVal = stock[pivot];
    [stock[pivot], stock[left]] = [stock[left], stock[pivot]];
    let i = left + 1;
    let j = right;
    while (i <= j) {
        while (i <= j && stock[i] < pivotVal) {
            i++;
        }
        while (i <= j && stock[j] > pivotVal) {
            j--;
        }
        if (i <= j) {
            [stock[i], stock[j]] = [stock[j], stock[i]];
            i++;
            j--;
        }
    }
    [stock[left], stock[j]] = [stock[j], stock[left]];
    if (cnt <= j) {
        return partition(stock, left, j, cnt);
    } else {
        return partition(stock, j + 1, right, cnt )
    }
}


assistant