题目:
小扣当前位于魔塔游戏第一层,共有 N 个房间,编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数组 nums,其中正数表示道具补血数值,即血量增加对应数值;负数表示怪物造成伤害值,即血量减少对应数值;0 表示房间对血量无影响。

小扣初始血量为 1,且无上限。假定小扣原计划按房间编号升序访问所有房间补血/打怪,为保证血量始终为正值,小扣需对房间访问顺序进行调整,每次仅能将一个怪物房间(负数的房间)调整至访问顺序末尾。请返回小扣最少需要调整几次,才能顺利访问所有房间。若调整顺序也无法访问完全部房间,请返回 -1。

示例 1:

输入:nums = [100,100,100,-250,-60,-140,-50,-50,100,150]
输出:1
解释:初始血量为 1。至少需要将 nums[3] 调整至访问顺序末尾以满足要求。

示例 2:

输入:nums = [-200,-300,400,0]
输出:-1
解释:调整访问顺序也无法完成全部房间的访问。

提示:

  • 1 <= nums.length <= 10^5
  • -10^5 <= nums[i] <= 10^5
分析一下题目:
首先 N 个房间   0 - N-1,房间可能补血可能扣血(正数补血  负数扣血);
还有就是 初始血量1 无上限 ,每次仅能将一个负数房间调整到访问的末尾;
最后让我们求最少需要调整多少次才能顺利访问所有房间,无法访问所有房间返回 -1;情景型的问题,分析一下,这道题其实不是很难,只要我们抓住一个点,正数补血,负数扣血
而我们需要调整 负数房间 的临界点就是 当我们的血量 <= 0 的时候,我们必须要调整了,
毕竟再不调整就结束了,我们调整的策略是什么呢?当然是想要调整的值越小越好啦。首先我们要利用的是 队列 的特性,先进先出,并且我们希望小的在前面,所以我们使用了
PriorityQueue<Integer> queue = new PriorityQueue<>((o1,o2) -> o1 - o2);
class Solution {public int magicTower(int[] nums) {PriorityQueue<Integer> queue = new PriorityQueue<>((o1,o2) -> o1 - o2);long res = 0,cur = 1,sum = 0;// 求和for(int x:nums){sum += x;}// 不可能到达所有房间if(sum < 0){return -1;}for(int x:nums){cur += x;if(x < 0){//入列queue.offer(x);}// 当前血量值小于或等于0if(cur <= 0){// 出列 调整负数的位置 相当于补血cur -= queue.poll();// 记录调换次数res++;}}return (int)res;}
}

力扣刷题 - LCP 30. 魔塔游戏相关推荐

  1. 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!

    开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...

  2. 『力扣刷题』5275_找出井字棋的获胜者 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5275_找出井字棋的获胜者 * 5275. 找出井字棋的获胜者 显示英文描述* 用户通过次数0* 用户尝试次数0* ...

  3. 力扣刷题记录--哈希表相关题目

    当遇到需要快速判断一个元素是否出现在集合里面的时候,可以考虑哈希法,牺牲一定的空间换取查找的时间. java常用的哈希表有HashMap.HashSet以及用数组去模拟哈希,这几种方法各有优劣. 数组 ...

  4. 《剑指Offer》力扣刷题笔记(03-10)

    <剑指Offer>力扣刷题笔记(03-10) 最近确实有点闲,想在进组搬砖之前找点有意义的事干,于是,就开始刷<剑指Offer>.<程序员面试金典>等书上的题目,也 ...

  5. 力扣刷题之二叉树的层序遍历

                                                      Welcome to you, 每日一刷系列 二叉树的层序遍历 二叉树的层序遍历II 二叉树的右视图 ...

  6. 『力扣刷题』5276_不浪费原料的汉堡制作方案 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5276_不浪费原料的汉堡制作方案 * 5276. 不浪费原料的汉堡制作方案 显示英文描述* 用户通过次数212* 用 ...

  7. 『力扣刷题』5238_找出给定方程的正整数解 解题代码

    html: embed_local_images: true embed_svg: true offline: true toc: undefined print_background: false ...

  8. 力扣刷题全局变量WA,局部变量AC的问题

    力扣刷题全局变量WA,局部变量AC问题 题目 原因 题目 golang力扣leetcode 1219.黄金矿工 原因 今天在刷题的时候,遇到一个现象,本地跑测试全部通过,一提交就错错错,非常离谱 然后 ...

  9. 力扣刷题pdf(java版本,内含暗黑版和光明版),都在这里了

    BAT大佬力扣刷题pdf,都在这里了! ​相信很多小伙伴刷题的时候面对力扣上近两千道题目,感觉无从下手! 我找了很久,今天终于让找到了Java版leetcode算法题解笔记,强烈建议先按照本篇介绍pd ...

最新文章

  1. linux下配置ip地址的方法
  2. SQL批量修改字段值
  3. 【每周CV论文推荐】 初学目标检测必须要读的文章
  4. mpvue 踩坑之src数据绑定出错
  5. 学习、积累、交流-IC设计高手的成长之路
  6. Centos7 更新pip和scipy
  7. servu无法显示远程文件夹_win10软件:解决文件资源管理器无法显示文件夹大小...
  8. java 管道流_Java IO7:管道流、对象流
  9. 畅捷通服务器系统,畅捷通
  10. RPGViewer - 游戏常用压缩算法的介绍和识别
  11. JZOJ5857. 【NOIP提高组模拟A组2018.9.8】没有上司的舞会
  12. 基本共射放大电路的工作原理
  13. #pragma comment
  14. ODL框架项目搭建小试牛刀-demo篇
  15. jq多选按钮值_JQuery 多选按钮checkbox
  16. oracle服务器配置端口,服务端配置一个多端口号(如1521/1526)监听器
  17. Qt 编程指南 8 显示静态小图片和动态大图片
  18. RHCS基本理論(台湾人写的不错的文章)
  19. sql server 2008 R2 与 sql server 2012 下载地址(包括x86、x64)
  20. (Java高级程序设计-案例)-通过JDBC连接MySQL并对表进行增、删、改、查

热门文章

  1. mysql批量修改表字段类型(生成修改sql)
  2. java 字符串 转double_如何使用Java程序将Double转换为String
  3. 共用体和结构体的区别
  4. OpenMv单颜色彩色识别
  5. Angular 调用导入百度地图API接口
  6. 更新版:软件测试菜鸟入门
  7. Matlab使用coder.checkGpuInstall时报错‘emlc:compilationError‘
  8. 讲故事,学(AHK)设计模式—观察者模式
  9. python3爬虫 selenium+pyquery爬取人才网简历实战
  10. html中span标签字数大小,DIV字体大小 span字体大小 font-size样式