魔塔游戏

1.题目

这道题是2024-2-6的签到题,题目难度中等。

考核的知识点为:贪心算法+优先队列。

题目链接:魔塔游戏

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

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

2.思路

其实对于优先队列的问题,它其实已经包含了贪心算法的思想在里面,这道题也不例外。对于这道题,我们需要弄明白下面几个问题:

什么是优先队列?

优先队列相比于普通的队列,它会根据某种规则自动排序,比如根据队列元素的大小进行排序,小的在前面或者大的在前面。

通俗来讲,也有一个结构和它类似——小根堆。小根堆的特性是元素小的在上面,元素大的在下面(这里仅按照元素大小排序)。

如何应用到这题?

那我们如何使用优先队列在这题呢?根据题目要求,我们不到万不得已的时候不会移动怪物房间,因此我们只需要在当前的血量小于1的时候移动怪物房间,那移动哪一个怪物房间呢?这就提到我们的优先队列了,我们将扣血最多的怪物房间移动到队列尾部就行了,这样就即解决我们的血量问题,也能够使得利益最大化(贪心思想)。

解题思路

在我们对有限队列有了一定的认知后,我们在想怎么应用这题。我的思路是这样,这题的要求是尽可能最小移动次数来使得怪物房间移动到队尾。因此我们需要考虑两种情况:

  1. nums数组和小于0
  2. nums数组和大于0

对于第一种情况相信我们很容易理解,你都总和小于0了,说明无论怎么花里胡哨的移动,他最终都会ganmeover。

因此我们的算法只需要考虑第二种情况。首先,我们初始并定义一个小根堆,然后定义一个遍历blood作为血量,ans为操作次数。然后开始遍历数组,如果当前的num值小于0,说明这个房间是怪物房间,我们将它加入到小根堆(优先队列)里面。然后先加入到当前血量中,如果加入到当前血量后小于1,说明有个怪物房间需要移动到队尾了,因此这里需要移动扣血最多的怪物房间到队尾。

3.代码

import heapq
from typing import List
class S:def f(self,nums:List[int])->int:# 如果数组总和小于0,则返回-1if sum(nums) < 0:return -1# 操作次数ans = 0# 小根堆q = []# 血量blood = 1# 初始化为小根堆heapq.heapify(q)# 遍历nums数组for num in nums:# 如果当前的值小于0,则加入小根堆if num < 0:heapq.heappush(q,num)# 加入到血量blood += num# 如果血量小于1,说明需要移动房间if blood < 1:# 移动扣血最多的房间blood -= heapq.heappop(q)# 操作次数+1ans += 1return ans

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

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

相关文章

嵌入式硬件越老越吃香,确实没错!

不知不觉已经从事硬件设计7年多了&#xff0c;7年对于一个从事硬件设计来说能有几个完整的生涯。2016年毕业&#xff0c;2023年即将结束&#xff0c;我已经在汽车这行业“摸爬滚打”了7年的时光。 回顾这7年&#xff0c;自己真的成长了很多很多。有项目失败整改的经验收获&…

Linux进程间通信(IPC)

要想进程间通信&#xff0c;数据交换&#xff0c;必须通过内核&#xff1b; 一个进程将数据写到内核&#xff0c;然后另一个进程从内核读走数据。 IPC&#xff1a;进程间通信&#xff08;interprocess communication) 通信方式&#xff1a; 管道信号共享映射区&#xff08;…

假期day7

设计qq界面 代码 ui->lab1->setPixmap(QPixmap(":/pictrue/denglu.webp"));ui->lab1->setScaledContents(true);ui->lab2->setPixmap(QPixmap(":/pictrue/passwd.jpg"));ui->lab2->setScaledContents(true);ui->lab3->setP…

过年在家玩幻兽帕鲁,腾讯云和阿里云Palworld新年礼物

过年在家玩幻兽帕鲁Palworld&#xff0c;阿里云和腾讯云助力玩家一键全自动部署幻兽帕鲁服务器&#xff0c;成本仅需26元&#xff0c;联机三五好友一起开黑&#xff0c;春节畅玩幻兽帕鲁&#xff0c;自建4核16G或8核32G配置&#xff0c;稳定不卡&#xff0c;不用担心官方服务器…

fast.ai 深度学习笔记(三)

深度学习 2&#xff1a;第 1 部分第 6 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-1-lesson-6-de70d626976c 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这…

监控概述、安装zabbix、配置zabbixagent、添加被控端主机、常用监控指标、自定义监控项

监控概述 对服务的管理&#xff0c;不能仅限于可用性。 还需要服务可以安全、稳定、高效地运行。 监控的目的&#xff1a;早发现、早治疗。 被监控的资源类型&#xff1a; 公开数据&#xff1a;对外开放的&#xff0c;不需要认证即可获取的数据私有数据&#xff1a;对外不开…

DRF 分页器的使用

drf提供了三个内置分页器&#xff0c;根据前端需求选择使用。 全局配置 在配置文件中设置全局的分页方式&#xff0c;如&#xff1a; REST_FRAMEWORK {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.PageNumberPagination,PAGE_SIZE: 100 # 每页数目 }也可通过继…

20240211作业

运算符 1、选择题 1.1、若有以下程序 main(){ Char a1,b2; printf("%c,",b); printf("%d\n",b-a); } 程序运行后的输出结果是 A&#xff09;3,2 B&#xff09;50,2 C&#xff09;2,2 D&#xff09;2,50 1.2、有以下程序 main(){ i…

python coding with ChatGPT 打卡第20天| 二叉搜索树:搜索、验证、最小绝对差、众数

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

开关灯(c++题解)

题目描述 假设有N盏灯(N为不大于5000的正整数)&#xff0c;从1到N按顺序依次编号&#xff0c;初始时全部处于关闭状态&#xff1b;有M个人(M为不大于N的正整数)也从1到M依次编号。 第一个人&#xff08;1号&#xff09;将灯全部打开&#xff0c;第二个人&#xff08;2号&…

(基于xml配置Aop)学习Spring的第十五天

一 . Spring Aop编程简介 再详细点 , 如下 二 . 基于xml配置Aop 解决proxy相关问题 解决问题开始用xml配置AOP 导入pom坐标 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.6</vers…

webpack5 常用插件使用

webpack5常用插件使用 1. CleanWebpackPlugin2. HtmlWebpackPlugin3. DefinePlugin4.CopyWebpackPlugin 1. CleanWebpackPlugin 问题&#xff1a;每次打包完都需要手动删除掉dist文件目录&#xff0c;使用CleanWebpackPlugin就可自动清除dist目录。作用&#xff1a;自动清除di…

【算法】排序详解(快速排序,堆排序,归并排序,插入排序,希尔排序,选择排序,冒泡排序)

目录 排序的概念&#xff1a; 排序算法的实现&#xff1a; 插入排序&#xff1a; 希尔排序&#xff1a; 选择排序&#xff1a; 堆排序&#xff1a; 冒泡排序&#xff1a; 快速排序&#xff1a; 快速排序的基本框架&#xff1a; 1.Hoare法 2. 挖坑法 3.前后指针法 快…

linux系统下vscode portable版本的c++/Cmake环境搭建001

linux系统下vscode portable版本的Cmake环境搭建 vscode portable 安装安装基本工具安装 build-essential安装 CMake final script code安装插件CMake Tools & cmakeC/C Extension Pack Testsettings,jsonCMakeLists.txt调试和运行工具 CG 目的&#xff1a;希望在获得一个新…

DolphinScheduler-3.2.0 集群搭建

本篇文章主要记录DolphinScheduler-3.2.0 集群部署流程。 注&#xff1a;参考文档&#xff1a; DolphinScheduler-3.2.0生产集群高可用搭建_dophinscheduler3.2.0 使用说明-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞25次&#xff0c;收藏23次。DolphinScheduler-3.2.0生产…

svg基础(七)滤镜-feflood,feDisplacementMap 位置替换滤镜

1 feflood 此过滤器创建一个矩形&#xff0c;其中填充了指定的的颜色&#xff0c;应用了不透明度值。 1.1 语法 <feFlood x"" y"" width"" height"" flood-color"" flood-opacity""/>1.2 属性 x&#x…

【复现】泛微云桥 e-Bridge SQL注入漏洞_45

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 泛微云桥&#xff08;e-Bridge&#xff09;是上海泛微公司在”互联网”的背景下研发的一款用于桥接互联网开放资源与企业信息化系…

MySQL数据库-索引概念及其数据结构、覆盖索引与回表查询关联、超大分页解决思路

索引是帮助mysql高效获取数据的数据结构,主要用来提高检索的效率,降低数据库的IO成本(输入输出成本&#xff08;Input-Output Cost&#xff09;),同时通过索引对数据进行排序也能降低数据排序的成本,降低了CPU的消耗。 Mysql的默认存储引擎InnoDB&#xff0c;InnoDB采用的B树的…

专业135+总400+中国科学院大学859国科大信号与系统考研经验电子信息与通信,真题,大纲,参考书

今年考研专业课859信号与系统135&#xff0c;总分400上岸国科大&#xff0c;总结一下自己这一年的复习经验&#xff0c;希望对后面报考中科院大学的同学有所帮助。 专业课&#xff1a; 国科大不同研究所都是统一命题&#xff0c;859信号与系统的参考书目是郑君里的《信号与系…

2024-02-07(Sqoop,Flume)

1.Sqoop的增量导入 实际工作中&#xff0c;数据的导入很多时候只需要导入增量的数据&#xff0c;并不需要将表中的数据每次都全部导入到hive或者hdfs中&#xff0c;因为这样会造成数据重复问题。 增量导入就是仅导入新添加到表中的行的技术。 sqoop支持两种模式的增量导入&a…