题目
仓库管理员以数组 stock 形式记录商品库存表,其中 stocki 表示对应商品库存余量。请返回库存余量最少的 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 int0;
}
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),平均递归调用深度