LeetCode 502 IPO[最大堆 排序] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 502 IPO[最大堆 排序] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
一道标记为困难题,但是仔细审题的话最多只是中等题的难度。你会发现这题绕了一大圈,本质还是贪心,只不过多了需要满足贪心的条件而已,首先由于启动资金是固定的,你得从小往大去观察哪些最小资本合适,这就需要定义一个pair,最小资本+最大利润,在满足最小资本的条件下,找到最大的利润加到启动资金里面,这样不断循环遍历,直到找到k个或者遍历结束,返回最多资本即可,pair的排序利用sort函数,找到满足条件的最大利润利用最大堆priority_queue
,代码如下:
class Solution {
public:
int findMaximizedCapital(int k, int w, vector<int>& profits, vector<int>& capital) {
int n = profits.size();
vector<pair<int, int>> money;
for(int i = 0; i < n; i ++) {
money.push_back({capital[i], profits[i]});
}
// 根据最小资本排序
sort(money.begin(), money.end());
// 定义最大堆,存放满足当前资本下所能获得的最大资金
priority_queue<int> q;
int index = 0;
while(k > 0) {
while(index < n && money[index].first <= w) {
q.push(money[index].second);
index ++;
}
// 如果没有满足条件的
if(q.empty()) {
break;
}
w += q.top();
q.pop();
k --;
}
return w;
}
};
以上是关于LeetCode 502 IPO[最大堆 排序] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章