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

Leetcode 2786. 访问数组中的位置使分数最大(DP 优化)

Leetcode 2786. 访问数组中的位置使分数最大

DP
以每个位置为结尾的序列的分数取决于前方的分数,根据奇偶性计算,取最大值
超时

class Solution {public long maxScore(int[] nums, int x) {int n = nums.length;long dp[] = new long[n];Arrays.fill(dp, Integer.MIN_VALUE);dp[0] = nums[0];long res = nums[0];for(int i = 1; i < n; i ++){for(int j = 0; j < i; j ++){if(nums[j] % 2 == nums[i] % 2){dp[i] = Math.max(dp[i], dp[j] + nums[i]);}else{dp[i] = Math.max(dp[i], dp[j] + nums[i] - (long)x);}}res = Math.max(res, dp[i]);}return res;}
}

优化

对于 nums[ i ] 来说,该位置的分数取决于前方的序列分数,分为上一个选择是奇数和偶数两种情况,只需max0、max1来分别记录前方的奇偶两种情况最值即可计算出当前位置的分数最值

避免思维误区,计算cur时考虑的不是选或不选的两种情况,而是必定选择 nums[ i ] 作为序列最后一个元素时,取前方奇偶两种可能所获得的分数哪一种更大

由于存在x值较大的情况,计算中可能出现负数,将max0、max1初始化为INT_MIN

获取最值后根据 nums[ i ] 的奇偶性选择更新max0或max1
计算max0/1的两种可能时,即使有可能异性-x后的分数更大,但由于存在同性计算 — 两个正数相加,因此max0/1的值必定会增大,直接将cur赋值给max0/1

class Solution {public long maxScore(int[] nums, int x) {int n = nums.length;long max0 = Integer.MIN_VALUE; // 前方偶数结尾的最大分数long max1 = Integer.MIN_VALUE; // 前方奇数结尾的最大分数if(nums[0] % 2 == 0)max0 = nums[0];elsemax1 = nums[0];long res = nums[0];for(int i = 1; i < n; i ++){long cur;if(nums[i] % 2 == 0){cur = Math.max(max0 + nums[i], max1 + nums[i] - x);max0 = cur;// max0 = Math.max(max0, cur);// 同性情况max0+nums[i],正数求和计算导致cur必然大于max0,省去Max计算}else{cur = Math.max(max0 + nums[i] - x, max1 + nums[i]);max1 = cur;}res = Math.max(res, cur);}return res;}
}
http://www.lryc.cn/news/375512.html

相关文章:

  • 【docker实战】使用Dockerfile的COPY拷贝资源遇到的问题
  • 如何用多线程执行 unittest 测试用例实现方案
  • Ascend310 EP模式下容器内进行推理测试
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • Java基础之Math与Array类与System
  • 警告:Hydration attribute mismatch on Note: this mismatch is check-only.(水合不匹配)
  • 【机器学习】CART决策树算法的核心思想及其大数据时代银行贷款参考案例——机器认知外界的重要算法
  • 编程软件是由什么编程的
  • 如何查看自己本地ip
  • 高考分数限制下,选好专业还是选好学校?
  • Django学习(2)项目实战
  • pdf格式转成jpg图片,pdf格式如何转jpg
  • Java的三个接口Comparable,Comparator,Cloneable(浅拷贝与深拷贝)
  • pytorch学习笔记7
  • LeetCode热题3.无重复的最长字串
  • Python武器库开发-武器库篇之SQL注入扫描器(五十九)
  • 图说设计模式:单例模式
  • 探索设计模式——单例模式详解
  • 建筑垃圾/城市固废倾倒转移乱象:EasyCVR+AI智能视频监控方案助力城市环保监管
  • C的I/O操作
  • Android Audio实战——声道信息回调(五)
  • ThreeJS给模型添加介绍文字(贴在模型上 不会一直面向我们)
  • [Qt] Qt Creator 以及 Qt 在线安装教程
  • 【大分享05】动态容差归档,打通不动产登记管理“最后一公里”
  • 嵌入式模拟电路面试题大全及参考答案(持续更新)
  • 【C语言】解决C语言报错:Uninitialized Variable
  • RabbitMQ实践——交换器(Exchange)绑定交换器
  • 使用 Vue 官方脚手架初始化 Vue3 项目
  • C语言中的宏定义(#define)和函数调用的区别
  • 196. 删除重复的电子邮箱