class Solution {
public:
vector inventoryManagement(vector& stock, int cnt) {
vector arr;
int n = stock.size();
quickSort(stock,0,n-1);
for(int i =0;i<cnt;i++){
arr.push_back(stock[i]);
}
return arr;
}
void quickSort(vector<int>& a, int l, int r){
if(l<r){
int tmp = a[l];//注意啊,选左边第一个元素为枢轴。不是a[0]
int i = l;
int j = r;
while(i<j){
while(i<j&& a[j]>=tmp) j--;
if(i<j) a[i] = a[j];
while(i<j&& a[i]<=tmp) i++;
if(i<j) a[j] = a[i];
}
a[i] =tmp;
//到此处时,i在数组中间,i左边小,右边大
quickSort(a,l,i-1);
quickSort(a,i+1,r);
}
}
共以下 13 个回答
public void quickSort(int[] strs, int low, int high) {
if (low < high) {
int middle = getMiddle(strs, low, high);
quickSort(strs, low, middle – 1);
quickSort(strs, middle + 1, high);
}
}
public int getMiddle(int[] strs, int low, int high) {
//数组的第一个数为基准元素
int temp = strs[low];
while (low < high) {
//从后向前找比基准小的数
while (low < high && strs[high] >=temp)
high–;
//把比基准小的数移到低端
strs[low] = strs[high];
//从前向后找比基准大的数
while (low < high && strs[low] <=temp)
low++;
//把比基准大的数移到高端
strs[high] = strs[low];
}
strs[low] = temp;
return low;
}
public int[] inventoryManagement(int[] stock, int cnt) {
quickSort(stock,0,stock.length-1);
return Arrays.copyOf(stock,cnt);
}
思路:快排
java heap = new PriorityQueue<>(k, (i1, i2) -> Integer.compare(i2, i1));
class Solution{
public int[] inventoryManagement(int[] stock, int cnt){
quickSort(stock, 0, stock.length – 1);
return Arrays.copyOf(stock, cnt);
}
private void quickSort(int[] stock, int l, int r){
if(l >= r) return;
int i = l, j = r;
while(i < j){
while(i < j && stock[j] >= stock[l]) j–;
while(i < j && stock[i] <= stock[l]) i++;
swap(stock, i, j);
}
swap(stock, i, l);
quickSort(stock, l, i – 1);
quickSort(stock, i + 1, r);
}
private void swap(int[] stock, int i, int j){
int tmp = stock[i];
stock[i] = stock[j];
stock[j] = tmp;
}
}
提交
java
class Solution{
public int[] inventoryManagement(int[] arr, int k){
if(k 0){
return new int[0];
}
Queue
}
堆排序
class Solution { inventoryManagement(vector & stock, int cnt) { res; & stock, int l, int r) {
public:
vector
quickSort(stock, 0, stock.size() – 1);
vector
res.assign(stock.begin(), stock.begin() + cnt);
return res;
}
private:
void quickSort(vector
// 子数组长度为 1 时终止递归
if (l >= r) return;
// 哨兵划分操作(以 stock[l] 作为基准数)
int i = l, j = r;
while (i < j) {
while (i < j && stock[j] >= stock[l]) j–;
while (i < j && stock[i] <= stock[l]) i++;
swap(stock[i], stock[j]);
}
swap(stock[i], stock[l]);
// 递归左(右)子数组执行哨兵划分
quickSort(stock, l, i – 1);
quickSort(stock, i + 1, r);
}
};
打卡
时间复杂度:O(n)
空间复杂度:O(logn)
时间复杂度 O(NlogN) : 库函数、快排等排序算法的平均时间复杂度为 O(NlogN) 。
空间复杂度 O(N): 快速排序的递归深度最好(平均)为 O(logN) ,最差情况(即输入数组完全倒序)为 O(N)。
class Solution { inventoryManagement(vector & stock, int cnt) { arr;
public:
vector
vector
int n = stock.size();
quickSort(stock,0,n-1);
for(int i =0;i<cnt;i++){
arr.push_back(stock[i]);
}
return arr;
}
};
打卡
“`java
class Solution {
public int[] inventoryManagement(int[] stock, int cnt) {
quicksort(stock,0,stock.length-1,cnt);
int[] ans = new int[cnt];
for(int i = 0; i < cnt; i++){ ans[i] = stock[i]; } return ans; } private void quicksort(int[] stock,int begin,int end,int cnt){ if(begin >= end || cnt < begin) return; int key = stock[begin]; int l = begin; int r = end; while(l < r){ while(l < r && stock[r] >= key)
r–;
stock[l] = stock[r];
while(l < r && stock[l] <= key) l++; stock[r] = stock[l]; } stock[l] = key; if(cnt < l) quicksort(stock,begin,l-1,cnt); if(cnt > l) quicksort(stock,l+1,end,cnt);
}
}
时间复杂度On
空间复杂度Ologn
快速排序
“`c++ inventoryManagement(vector & stock, int cnt) { quickfind(vector &arr, int left, int right, int k )(arr.begin(), arr.begin() + k);
class Solution {
public:
vector
if(stock.empty() == true || cnt <= 0) { return {}; } return quickfind(stock, 0, stock.size() - 1, cnt); } private: vector
{
int i = partiton(arr, left, right);
if( i + 1 k)
{
return vector
}
else if(i + 1 > k)
{
return quickfind(arr, left, i – 1, k);
}
else
{
return quickfind(arr, i + 1, right, k);
}
}
};
“`
时间复杂度:O(n)
空间复杂度:O(logn),平均递归调用深度
思路:快排的思想
“`c++ inventoryManagement(vector & stock, int cnt) { quickSort(vector & stock, int cnt, int left, int right) { ans;
class Solution {
public:
vector
if (cnt >= stock.size()) return stock;
return quickSort(stock, cnt, 0, stock.size()-1);
}
private:
vector
int i = left, j = right;
while (i < j) { while (i < j && stock[j] > stock[left]) –j;
while (i < j && stock[i] <= stock[left]) ++i; swap(stock[i], stock[j]); } swap(stock[i], stock[left]); if (i > cnt) return quickSort(stock, cnt, left, i-1);
if (i < cnt) return quickSort(stock, cnt, i+1, right); vector
ans.assign(stock.begin(), stock.begin()+cnt);
return ans;
}
};
“`
class Solution { inventoryManagement(vector & stock, int cnt) { (); findk(vector & stock, int l, int r, int cnt) { res;
public:
vector
if(stock.size() < cnt) return vector
return findk(stock, 0, stock.size() – 1, cnt);
}
private:
vector
int i = l, j = r;
while(i < j) {
while(i < j && stock[j] >= stock[l]) j –;
while(i < j && stock[i] <= stock[l]) i ++;
swap(stock[i],stock[j]);
}
swap(stock[i],stock[l]);
if(i > cnt) return findk(stock, l, i – 1, cnt);
if(i < cnt) return findk(stock, i + 1, r, cnt);
vector
for(int k = 0; k < i; k ++) {
res.push_back(stock[k]);
}
return res;
}
};
时间复杂度O(n),空间复杂度O(logn)