LeetCode刷题实战502:IPO
示例
示例 1:
输入:k = 2, w = 0, profits = [1,2,3], capital = [0,1,1]
输出:4
解释:
由于你的初始资本为 0,你仅可以从 0 号项目开始。
在完成后,你将获得 1 的利润,你的总资本将变为 1。
此时你可以选择开始 1 号或 2 号项目。
由于你最多可以选择两个项目,所以你需要完成 2 号项目以获得最大的资本。
因此,输出最后最大化的资本,为 0 + 1 + 3 = 4。
示例 2:
输入:k = 3, w = 0, profits = [1,2,3], capital = [0,1,2]
输出:6
解题
class Solution {
public:
int findMaximizedCapital(int k, int w, vector<int>& Profits, vector<int>& Capital) {
vectorint, int>> q;
int st = w;
int n = Profits.size();
for (int i = 0; i < n; i ++ )
q.push_back({Capital[i], Profits[i]});
sort(q.begin(), q.end());
priority_queue<int> heap;
int i = 0, res = 0;
while (k -- ) {
while (i < n && w >= q[i].first)
heap.push(q[i ++ ].second);
if (heap.empty()) break;
auto t = heap.top(); heap.pop();
res += t;
w += t;
}
return res + st;
}
};