intfindKthLargest(vector<int>& nums,int k){srand(time(nullptr));returnQuickSort(nums,0, nums.size()-1, k);}intQuickSort(vector<int>& nums,int l,int r,int k){if(l == r){return nums[l];}// 数组分三块int key = nums[rand()%(r - l +1)+ l];int i = l, left = l -1, right = r +1;while(i < right){if(nums[i]< key){swap(nums[++left], nums[i++]);}elseif(nums[i]== key){
i++;}else// nums[i] > key{swap(nums[--right], nums[i]);}}// 分情况讨论int c = r - right +1, b = right - left -1;if(c >= k){returnQuickSort(nums, right, r, k);}elseif(b + c >= k){return key;}else{returnQuickSort(nums, l, left, k - b - c);}}
vector<int>InventoryManagement(vector<int>& nums,int k){srand(time(nullptr));QuickSort(nums,0, nums.size()-1, k);return{nums.begin(), nums.begin()+ k};}voidQuickSort(vector<int>& nums,int l,int r,int k){if(l >= r){return;}int key = nums[rand()%(r - l +1)+ l];int i = l, left = l -1, right = r +1;while(i < right){if(nums[i]< key){swap(nums[++left], nums[i++]);}elseif(nums[i]== key){
i++;}else// nums[i] > key{swap(nums[--right], nums[i]);}}// [l, left] [left + 1, right - 1] [right, r]// 分情况讨论int a = left - l +1, b = right - left -1;if(a > k){QuickSort(nums, l, left, k);}elseif(a + b >= k){return;}else{QuickSort(nums, right, r, k - a - b);}}