力扣--LCR 159.库存管理III

题目

仓库管理员以数组 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]

提示:

0 <= cnt <= stock.length <= 10000

	0 <= stock[i] <= 10000

代码

class Solution {

public int[] inventoryManagement(int[] arr, int k) {

if(arr == null || arr.length == 0 || k == 0){

return new int[0];

}

    return quickFind(arr, 0, arr.length - 1, k);
}
int[] quickFind(int[] arr, int left, int right, int k){
    int i = partition(arr, left, right);
    if(i + 1 == k){
        return Arrays.copyOf(arr, k);
    }

    if(i + 1 > k){
        return quickFind(arr, 0, i - 1, k);
    } else {
        return quickFind(arr, i + 1, right, k);
    }
}

int partition(int[] arr, int left, int right){
    int pivot = arr[left];

    int i = left + 1;
    int j = right;

    while(i < j){
        while(i <= j && arr[i] <= pivot) i++;
        while(i <= j && arr[j] >= pivot) j--;
        if(i >= j){
            break;
        }

        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    arr[left] = arr[j];
    arr[j] = pivot;
    return j;

}

}

时间复杂度:O(n)

空间复杂度:O(logn),平均递归调用深度

相关推荐
慕容青峰28 分钟前
蓝桥杯第十五届CA省赛【因数计数】题解
c++·算法·蓝桥杯·sublime text
冠位观测者36 分钟前
常见排序算法总结 (五) - 堆排序与堆操作
数据结构·算法·排序算法
StayInLove1 小时前
线程池中线程异常后到底是怎么处理的
java·jvm·算法
古希腊掌管学习的神2 小时前
[机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)
人工智能·python·算法·机器学习
黑色叉腰丶大魔王2 小时前
《C 语言:详解指针》
数据结构
山河君2 小时前
音频进阶学习八——傅里叶变换的介绍
学习·算法·音视频·信号处理
重生之我在VS写bug2 小时前
【C语言的奥秘11】指针知识点总结(续)
c语言·开发语言·算法
勤劳的进取家3 小时前
高斯混合模型及最大期望算法(EM)聚类
人工智能·python·算法·机器学习
eternal__day3 小时前
数据结十大排序之(选排,希尔,插排,堆排)
java·数据结构·算法·推荐算法
Hello.Reader3 小时前
深入浅出支持向量机(SVM)
算法·机器学习·支持向量机