b_lc_骑士通关(贪心+懒惰思想)

n 个房间,每个房间的补血道具/怪物对于血量影响记于数组 A,其中正数表示道具补血数值,即血量增加对应数值;负数表示怪物造成伤害值。调整,每次仅能将一个怪物房间(负数的房间)调整至访问顺序末尾。返回最少需要调整几次,才能顺利访问所有房间。若调整顺序也无法访问完全部房间,请返回 -1。

思路:一直走,当下先不要想着怎么调整哪个位置。懒惰贪心思想,直到血量s<=0我才去调整,由于是懒惰调整,所以我需要将以前的位置存到一个容器里,且调整的时候将容器里消耗最大的移到最后

class Solution {
public:
    int magicTower(vector<int>& A) {
        if (accumulate(A.begin(), A.end(), 0ll) < 0) return -1;
        priority_queue<int, vector<int>, greater<int>> q;
        long long s = 1, ans = 0;

        for (int x : A) {
            s += x;
            if (x < 0) q.push(x);
            if (s <= 0) {
                s -= q.top(); q.pop();
                ans++;
            }
        }
        return ans;
    }
};
原文地址:https://www.cnblogs.com/wdt1/p/14641616.html