LCP 30. 魔塔游戏 - 力扣(LeetCode)

题目描述

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

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

题目示例

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

解题思路

思路

我们按照原计划访问所有房间。当访问到第 i 个房间时,如果生命值小于等于 0,那么我们必须要对房间顺序进行调整:

显然选择第 i 个房间之后的房间是没有意义的,它并不会改变当前的生命值;

因此我们只能选择第 i 个房间及之前的房间。对于所有可选的房间,无论将哪个房间调整至末尾,都不会改变最终的生命值(因为数组 nums 的和不会变化)。由于我们希望调整的次数最少,因此应当贪心地选择最小的那个 nums[j] 调整至末尾,使得当前的生命值尽可能高。

算法

在遍历房间的过程中,如果 nums[i] 为负数,我们将其放入一个小根堆(优先队列)中。当计算完第 i 个房间的生命值影响后,如果生命值小于等于 0,那么我们取出堆顶元素,表示将该房间调整至末尾,并将其补回生命值中。由于一定会从小根堆中取出一个小于等于 nums[i] 的值,因此调整完成后,生命值一定大于 0。

当所有房间遍历完成后,我们还需要将所有从堆中取出元素的和重新加入生命值,如果生命值小于等于 0,说明无解。

参考代码

class Solution {public int magicTower(int[] nums) {// 建立小根堆,使得每次取都取最小值PriorityQueue<Integer> pq = new PriorityQueue<>();int ans = 0;            // 记录调整次数long hp = 1, delay = 0; // 记录当前血量 和 延迟掉血量// 从头开始遍历for(int i = 0; i < nums.length; i++) {// 遇到正数,血量直接相加if(nums[i] > 0) {hp += nums[i];// 遇到负数相加之后,血量相加,将负数血量放到小根堆} else if(nums[i] < 0) {hp += nums[i];pq.offer(nums[i]);// 看是否比0小,如果小于0,将之前最大的负数放到后面if(hp <= 0) {ans++;int curr = pq.poll();hp -= curr;delay += curr;}}}hp += delay;return hp <= 0 ? -1 : ans;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RT-DETR有效改进】计算训练好权重文件对应的FPS、推理每张图片的平均时间(科研必备)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有…

【MySQL】-11 MySQL索引与索引类型

MySQL索引与索引类型 MySQL索引MySQL索引类型包括&#xff1a;&#xff08;1&#xff09;普通索引创建方式&#xff1a;创建索引修改表结构创建表的时候直接指定 (2&#xff09;唯一索引创建方式&#xff1a;创建索引修改表结构创建表的时候直接指定 &#xff08;4&#xff09;…

Docker安装及介绍

一、Docker的介绍 1.1、什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实…

Unity引擎学习笔记之【动画层操作】

动画层Animation Layer 一、动画器的三个基本状态 1. Any State&#xff08;任意状态&#xff09; “Any State”&#xff08;任意状态&#xff09;&#xff1a;这个状态可以用来连接多个状态机的任意状态转换。在动画控制器中&#xff0c;你可以使用“Any State”作为过渡条…

Python基础语法(内置Python, pycharm配置方式)

一.工具安装与配置 1.Python解释器的安装 官网网址:https://www.python.org/ 选择downloads即可(Windows用户点击Windows, 苹果用户点击macOS) 找到最新版本, 并选择 Download Windows installer (64-bit) 下载完成后可在得到一个安装包进行安装(安装时间较长) 安装完成后…

NLP_“预训练+微调大模型”模式和Prompt/Instruct模式的异同

文章目录 “预训练微调大模型”的模式以提示/指令模式直接使用大模型“预训练微调大模型”模式和Prompt/Instruct模式的异同小结 “预训练微调大模型”的模式 经过预训练的大模型所习得的语义信息和所蕴含的语言知识&#xff0c;很容易向下游任务迁移。NLP应用人员可以根据自己…

Java中处理I/O操作的不同方式:BIO,NIO,AIO

Java中处理I/O操作的不同方式&#xff1a;BIO&#xff0c;NIO&#xff0c;AIO 亲爱的朋友&#xff0c; 在这美好的时刻&#xff0c;愿你感受到生活的温暖和欢乐。愿你的每一天都充满着笑容和满足&#xff0c;无论面对什么挑战都能勇往直前&#xff0c;化解困境。 希望你的心中充…

初识C语言·预处理详解

目录 1 预定义符号 2 define定义常量 3 #define定义宏 4 带有副作用的宏 5 宏替换的规则 6 宏和函数的对比 7 # 和 ## i) #运算符 ii) ##运算符 8 命名约定 9 命令行定义 10 条件编译 条件编译1&#xff1a; 条件编译2&#xff1a; 条件编译3&#xff1a; 条件…

昆仑万维发布天工 2.0 大语言模型及AI助手App;AI成功破解2000年前碳化古卷轴

&#x1f989; AI新闻 &#x1f680; 昆仑万维发布天工 2.0 大语言模型及AI助手App 摘要&#xff1a;昆仑万维近日推出了新版MoE大语言模型“天工 2.0”和相应的“天工 AI 智能助手”App&#xff0c;宣称为国内首个面向C端用户免费的基于MoE架构的千亿级参数大模型应用。天工…

每天一个数据分析题(一百五十六)

在数据建模过程中&#xff0c;对于变量的筛选与维度归约&#xff0c;以下哪项描述是正确的&#xff1f; A. 主成分分析适用于可解释性较强的预测模型&#xff0c;因为它减少了变量间的相关性。 B. 变量聚类旨在通过保留所有变量来减少信息损失&#xff0c;适合于所有类型的数…

【力扣 - 时间复杂度和空间复杂度】

力扣刷题时&#xff0c;题目要求里经常有时间复杂度和空间复杂度的要求。那么&#xff0c;什么是时间复杂度和空间复杂度呢&#xff1f; 定义 时间复杂度和空间复杂度都是用于衡量算法性能的指标&#xff0c;但它们分别从不同的角度来评估算法的效率。 时间复杂度&#xff1a…

UE4 C++创建摄像机摇臂和相机并且设置Transform

新建MyPawn C类 .h #include "GameFramework/SpringArmComponent.h" //SpringArm组件 #include "Camera/CameraComponent.h" //Camera组件class 工程名称_API AMyPawn : public APawn { //定义组件变量 public:UPROPERTY(VisibleAnywhere, BlueprintRead…

Android:IntentActivity,Service,BroadcastReceiver

3.14 Android三大组件 1、Intent页面跳转 Intent(意图):将要做某一件事。Android的3大组件:Activity、Service、BroadcastReceiver,通过Intent启动,并且Intent可以携带数据。 Intent类方法setComponent()设置组件; setClass(packageContext,cls)设置类、 setActi…

CGAL::2D Arrangements-8

8.拓扑Traits 拓扑特征类封装了Arrangement_on_surface_2<GeometryTraits_2&#xff0c;TopologyTraits>类模板和外围模块使用的拓扑实体的定义和处理这些拓扑实体的函数的实现。每个拓扑特征类都必须对基本概念ArrangementBasicTopologyTraits进行建模。这一基本概念的…

C#,字符串相似度的莱文斯坦距离(Levenshtein Distance)算法与源代码

一、莱文斯坦&#xff08;Levenshtein&#xff09; Vladimir I. Levenshtein 弗拉基米尔I列文施坦博士是纠错码理论的先驱&#xff0c;被称为俄罗斯编码理论之父。Levenshtein是莫斯科俄罗斯科学院Keldysh应用数学研究所的研究教授&#xff0c;他的贡献体现在消费者的日常生活中…

PyTorch中torchvision库的详细介绍

torchvision 是 PyTorch 生态系统中的一个关键库&#xff0c;专门为计算机视觉任务设计和优化。它提供了以下几个核心功能&#xff1a; 数据集&#xff1a;内置了多种广泛使用的图像和视频数据集&#xff0c;如 MNIST、CIFAR10/100、Fashion-MNIST、ImageNet、COCO 等&#xff…

Linux中的numactl命令指南

假设我们想控制线程如何被分配到处理器核心&#xff0c;或者选择我们想分配数据的位置&#xff0c;那么numactl命令就适合此类任务。在这篇文章中&#xff0c;我们讨论了如何使用numactl命令执行此类操作。 目录&#xff1a; 介绍语法命令总结参考文献 简介 现代处理器采用…

QGIS编译(跨平台编译)之五十一:Shapelib编译(Windows、Linux、MacOS环境下编译)

文章目录 一、Shapelib介绍二、Shapelib下载三、Windows下编译四、Linux下编译五、MacOS下编译一、Shapelib介绍 Shapelib是一个开源的C/C++库,用于读取、写入和处理ESRI Shapefile格式的空间数据。Shapefile是一种常用的GIS数据格式,包含矢量数据,如点、线、面等。Shapeli…

rkmedia使用记录

1.函数 1&#xff09; RK_MPI_VI_SetChnAttr _CAPI RK_S32 RK_MPI_VI_SetChnAttr(VI_PIPE ViPipe, VI_CHN ViChn,const VI_CHN_ATTR_S *pstChnAttr); /*VI通道属性结构体指针1&#xff09;pcVideoNode&#xff1a;video节点路径2&#xff09;u32BufCnt&#xff1a;VI捕获视频…

ROS学习笔记13:导航相关消息

前言 本人ROS小白&#xff0c;利用寒假时间学习ROS&#xff0c;在此以笔记的方式记录自己每天的学习过程。争取写满20篇(13/20)。 环境&#xff1a;Ubuntu20.04、ROS1&#xff1a;noetic 环境配置&#xff1a;严格按照下方学习链接的教程配置&#xff0c;基本一次成功。 学习链…