zhxue_11 2019-04-22 21:47 采纳率: 0%
浏览 183

c++迭代器不是不允许运行时添加或者删除的吗,为什么这里可以?

leetcode 502题,这个解法

class Solution {
public:
    int findMaximizedCapital(int k, int W, vector<int>& Profits, vector<int>& Capital) {
        priority_queue<int> q;
        multiset<pair<int, int>> s;
        for (int i = 0; i < Capital.size(); ++i) {
            s.insert({Capital[i], Profits[i]});
        }
        for (int i = 0; i < k; ++i) {
            for (auto it = s.begin(); it != s.end(); ++it) {
                if (it->first > W) break;
                q.push(it->second);
                s.erase(it);
            }
            if (q.empty()) break;
            W += q.top(); q.pop();
        }
        return W;
    }
};
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-09 02:17
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码使用了C++语言。在C++中,priority_queuemultiset 是标准库中的数据结构,它们提供了高效的操作,并且允许我们进行排序和查找。

    在这个问题中,我们首先创建了一个优先队列(priority_queue<int>)来存储最大利润的投资组合。然后,我们将所有投资组合按利润从高到低排列在一个多组集合中(multiset<pair<int, int>>)。这确保了我们在选择投资组合时总是选择最大的利润。

    接下来,我们遍历k次,每次遍历我们都从多组集合中取出一个最大的投资组合,并将其利润加到当前的最大利润上。然后,我们更新最大利润并移除这个投资组合。这样做的目的是找到最大的利润值。

    最后,返回最大利润值。

    评论

报告相同问题?