当前位置: 首页 > news >正文

LeetCode 3186 最大施法伤害

题目信息

LeetoCode地址: . - 力扣(LeetCode)

题目理解

这道题很直观,玩游戏的都懂,伤害最大化嘛!

但是每个法术释放与否可能会影响总体的伤害,因此是从局部最优解找到全局最优解的动态规划问题!

禁止释法的区间是+-2,且相同伤害的法术可以释放多次,所以很容易想到,将伤害相同的法术进行计数,并按照伤害的大小进行排序。这样就可以从最小的伤害开始考虑释放与否了。

剩下的,直接看代码吧

动态规划写法

class Solution {public long maximumTotalDamage(int[] power) {Map<Integer, Integer> map = new HashMap<>();for (int p : power) {map.put(p, map.getOrDefault(p, 0)+1);}//所有不重合的法术伤害及个数int[][] sorted = new int[map.size()][2];int i = 0;for (Map.Entry<Integer, Integer> entry : map.entrySet()){ sorted[i][0] = entry.getKey();sorted[i][1] = entry.getValue();i++;}//对伤害进行排序Arrays.sort(sorted, (a,b) -> a[0]-b[0]);//记录从第一个法术开始到当前法术可能造成的最大伤害long[] dp = new long[sorted.length];// 第一个法术当然要释放,不然伤害就是0dp[0] = 1L * sorted[0][0] * sorted[0][1];for (i = 1;i < sorted.length; i++) {// 假如第i个法术不释放,则最大伤害就是上一个值dp[i] = dp[i-1];int j = i-1;// 如果决定释放第i个法术,则j代表了上一个最近可以释放的法术// 这里没有必要朝更早期遍历,因为dp[i]一定不小于dp[i-1]while (j>=0 && sorted[j][0]+2 >= sorted[i][0]) {j--;}//如果存在j,则将其伤害和当前法术的伤害相加,和上一个值比较if (j >=0) {dp[i] = Math.max(dp[i], sorted[i][0] * sorted[i][1]+dp[j]); } else {//否则将只释放第i个法术的伤害和上一个值比较dp[i] = Math.max(sorted[i][0] * sorted[i][1], dp[i]);}}return dp[sorted.length-1];}
}

相关文章:

  • 如何选择适合的LabVIEW版本进行开发
  • 注解详解系列 - @ResponseStatus
  • Java中将文件转换为Base64编码的字节码
  • LabVIEW的热门应用
  • JAVA学习笔记DAY6——SSM_Spring
  • 在Linux上为Windows目标配置Qt交叉编译
  • 鸿蒙开发网络管理:【@ohos.request (上传下载)】
  • 48-4 内网渗透 - Rotten Potato(烂土豆) 提权
  • StableSwarmUI 安装教程(详细)
  • 【朝花夕拾】RT1170 CSI 如何使能摄像头Y8功能
  • 【自动驾驶】从零开始做自动驾驶小车
  • scale()函数详解
  • MySQL笔记——事务
  • 分享HTML显示2D/3D时间
  • Unity3d 游戏暂停(timeScale=0)引起的deltaTime关联的系列问题解决
  • 分享一款快速APP功能测试工具
  • 【React系列】如何构建React应用程序
  • Akka系列(七):Actor持久化之Akka persistence
  • CentOS 7 修改主机名
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • es6
  • es6(二):字符串的扩展
  • es6--symbol
  • fetch 从初识到应用
  • HTTP--网络协议分层,http历史(二)
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript标准库系列——Math对象和Date对象(二)
  • leetcode386. Lexicographical Numbers
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • sublime配置文件
  • VuePress 静态网站生成
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • linux 淘宝开源监控工具tsar
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​业务双活的数据切换思路设计(下)
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • ***详解账号泄露:全球约1亿用户已泄露
  • .net framework4与其client profile版本的区别
  • .NET 命令行参数包含应用程序路径吗?
  • .NET使用存储过程实现对数据库的增删改查
  • .net下的富文本编辑器FCKeditor的配置方法
  • 。。。。。
  • @Transaction注解失效的几种场景(附有示例代码)
  • [3300万人的聊天室] 作为产品的上游公司该如何?