class Solution {
public:
vector<int> inventoryManagement(vector<int>& stock, int cnt) {
return topk(stock,0,stock.size()-1,cnt);
}
private:
int partition(vector<int> &v,int left,int right)
{
int pivot = v[left];
while(left < right)
{
while(left < right && v[right] >= pivot) right--;
v[left] = v[right];
while(left < right && v[left] <= pivot) left++;
v[right] = v[left];
}
v[left] = pivot;
return left;
}
vector<int> topk(vector<int> &v, int left,int right,int cnt)
{
if(left < right)
{
int par = partition(v,left,right);
if (par == cnt-1) return vector<int>(v.begin(),v.begin()+cnt);
else if(par < cnt-1) topk(v,par+1,right,cnt);
else topk(v,left,par-1,cnt);
}
return vector<int>(v.begin(),v.begin()+cnt);
}
};
leetcode每日一题第六十天
最新推荐文章于 2024-10-31 16:16:13 发布
本文介绍了一个C++实现的库存管理函数inventoryManagement,它使用分治策略的topk函数来找出库存中最高的前k个元素。涉及到的关键技术包括动态分区和递归算法。
摘要由CSDN通过智能技术生成