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之路的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—502. IPO( 优先队列)—day32

贪心+优先队列502. IPO

502. IPO贪心C++

502. IPO贪心C++

力扣每日一题 502. IPO [贪心+优先队列]

LeetCode 704. 二分查找 / 1221. 分割平衡字符串 / 502. IPO