### 解题思路

遇见负数先加上再说，同时保存在最小堆里面
如果此时血量不是正数了，那么就从堆中拿出最小的一个放到最后，同时更新血量

### 代码

* java

```java
class Solution {
    public int magicTower(int[] nums) {
        int n = nums.length;
        Queue<Integer> queue = new PriorityQueue<>();
        long cur = 1, sum = 1;
        int ans = 0;
        for(int i = 0;i < n;i++){
            sum += nums[i];
            if(nums[i] < 0){
                queue.offer(nums[i]);
                cur += nums[i];
                if(cur <= 0){
                    cur -= queue.poll();
                    ans++;
                }
            }else{
                cur += nums[i];
            }
        }
        return sum > 0 ? ans : -1;
    }
}
```

