题目
仓库管理员以数组 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),平均递归调用深度