【36】魔塔游戏

如题:

LCP 30. 魔塔游戏

思路

参考力扣的大佬的思路,使用贪心算法解决

  1. 如果每个房间的血量加起来小于0,那么无解,返回-1即可;
  2. 我们使用先进先出的队列,来保存导致血量减小的房间(值);
    a). 当blood加当前层小于0,则表示当前层需要移动到最后,step加一,同时还原原血量;
  3. 遍历nums完成,则step为需要移动的房间数。

代码

    public int magicTower(int[] nums) {
        int sum = 0;
        for (int temp : nums) {
            sum += temp;
        }
        if (sum < 0) {
            return -1;
        }
        int step = 0;
        long blood = 0;
        Queue<Integer> queue = new PriorityQueue<>();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < 0) {
                queue.offer(nums[i]);
                if (blood + nums[i] < 0) {
                    // 移动次数加1
                    step ++;
                    // 血量还原
                    blood -= queue.poll();
                }
            }
            // 执行到这,表示血量不会小于0,直接累加即可
            blood += nums[i];
        }
        return step;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 晚上领导让安排一个技术面试,需要出一道题手写算法。想着在leetcode上找一道,又担心面试同学万一做过就不...
    清风Python阅读 197评论 0 3
  • to-do:看一下别人写的题解 https://github.com/981377660LMT/algorithm...
    winter_sweetie阅读 776评论 1 0
  • 1.链表 1.实现一个单向链表 2.找出链表相交节点,假设均没有环 3.判断链表是否有环思路:使用快慢两个指针,当...
    X1028阅读 692评论 0 0
  • [198. 打家劫舍] 描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制...
    夏_a495阅读 222评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,606评论 28 53