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;
}
};