力扣每日一题(2024-06-14)2786. 访问数组中的位置使分数最大

2024-06-14 11:12

本文主要是介绍力扣每日一题(2024-06-14)2786. 访问数组中的位置使分数最大,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考官方题解2786. 访问数组中的位置使分数最大 - 力扣(LeetCode)

问题描述

给定一个下标从 0 开始的整数数组 nums 和一个正整数 x。你一开始在数组的第 0 个位置,你可以移动到满足 i < j 的任意位置 j。如果你访问的位置 i,你可以获得分数 nums[i]。如果从位置 i 移动到位置 jnums[i]nums[j] 的奇偶性不同,那么你将失去分数 x。请返回你能得到的最大得分之和。

动态规划思想

我们需要用动态规划来解决这个问题,通过维护一个状态数组来记录在不同奇偶性下的最大得分。具体地:

  1. 状态定义

    • dp[0] 表示当前最后一个元素为偶数时的最大得分。

    • dp[1] 表示当前最后一个元素为奇数时的最大得分。

  2. 状态初始化

    • 初始情况下,你在位置 0,所以得分为 nums[0]

    • 根据 nums[0] 的奇偶性,初始化对应的 dp 值。

  3. 状态转移: 对于数组中的每一个元素 nums[i],计算当前元素为奇数或偶数的情况下的最大得分。

    • 如果 nums[i] 是偶数,parity = 0

    • 如果 nums[i] 是奇数,parity = 1

    • cur 表示当前最大得分,可以通过两种方式计算得到:

      1. 当前元素与上一个同奇偶性,则得分为 dp[parity] + nums[i]

      2. 当前元素与上一个不同奇偶性,则得分为 dp[1 - parity] + nums[i] - x

    • 更新 dp[parity] 为当前奇偶性情况下的最大得分。

    • 更新 res 为当前最大得分。

  4. 返回结果: 返回最终最大得分 res

代码详解

class Solution {public long maxScore(int[] nums, int x) {// 初始化long res = nums[0];  // 初始化结果为第一个元素的值long[] dp = {Integer.MIN_VALUE, Integer.MIN_VALUE}; dp[nums[0] % 2] = nums[0];  // 初始化 dp,依据第一个元素的奇偶性for (int i = 1; i < nums.length; i++) {// 计算当前元素的奇偶性int parity = nums[i] % 2;  // 计算当前最大得分long cur = Math.max(dp[parity] + nums[i], dp[1 - parity] + nums[i] - x);  // 更新 res = Math.max(res, cur);  dp[parity] = Math.max(dp[parity], cur); }return res;}
}

这篇关于力扣每日一题(2024-06-14)2786. 访问数组中的位置使分数最大的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060244

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

PyCharm如何更改缓存位置

《PyCharm如何更改缓存位置》:本文主要介绍PyCharm如何更改缓存位置的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm更改缓存位置1.打开PyCharm的安装编程目录2.将config、sjsystem、plugins和log的路径