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