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

2024-06-15 08:36

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

一、题目

1、题目描述

给你一个下标从 0 开始的整数数组 nums 和一个正整数 x 。

你 一开始 在数组的位置 0 处,你可以按照下述规则访问数组中的其他位置:

  • 如果你当前在位置 i ,那么你可以移动到满足 i < j 的 任意 位置 j 。
  • 对于你访问的位置 i ,你可以获得分数 nums[i] 。
  • 如果你从位置 i 移动到位置 j 且 nums[i] 和 nums[j] 的 奇偶性 不同,那么你将失去分数 x 。

请你返回你能得到的 最大 得分之和。

注意 ,你一开始的分数为 nums[0] 。

2、接口描述

python3
 ​
class Solution:def maxScore(self, nums: List[int], x: int) -> int:
cpp
 ​
class Solution {
public:long long maxScore(vector<int>& nums, int x) {}
};
js
 ​
/*** @param {number[]} nums* @param {number} x* @return {number}*/
var maxScore = function(nums, x) {};

3、原题链接

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


二、解题报告

1、思路分析

不难写出O(N^2)的朴素dp

f[i]为前i元素以i结尾的最大收益

但是我们发现我们状态转移和奇偶性有关

我们并不关注前面状态具体的值,我们只关注奇偶性

而我们每次无非就是从前面某个奇数结尾或者偶数结尾转移

那我们不妨只记录奇偶结尾的最大收益,然后进行转移即可

这样状态转移就变成了O(1)的

2、复杂度

时间复杂度: O(N)空间复杂度:O(1)

3、代码详解

python3
 ​
class Solution:def maxScore(self, nums: List[int], x: int) -> int:n = len(nums)f1 = nums[0] if nums[0] & 1 else -10**9f0 = nums[0] if f1 < 0 else -10**9for i in range(1, n):if nums[i] & 1:f1 = max(f1, f0 + nums[i] - x, f1 + nums[i])else:f0 = max(f0, f0 + nums[i], f1 + nums[i] - x)return max(f0, f1)
cpp
 ​
using i64 = long long;
const i64 inf = 1e9;
auto _ = []{std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);return 0;
};
class Solution {
public:long long maxScore(vector<int>& nums, int x) {i64 f[2] { -inf, -inf };int n = nums.size();f[nums[0] & 1] = nums[0];for (int i = 1; i < n; i ++) {int j = nums[i] & 1;f[j] = max(f[j ^ 1] + nums[i] - x, f[j] + nums[i]);}return std::max(f[0], f[1]);}
};
js
 ​
/*** @param {number[]} nums* @param {number} x* @return {number}*/
var maxScore = function(nums, x) {let f = [-Infinity, -Infinity];f[nums[0] & 1] = nums[0];for (let i = 1; i < nums.length; i ++ ) {let j = nums[i] & 1;f[j] = Math.max(f[j], f[j ^ 1] + nums[i] - x, f[j] + nums[i]);}return Math.max(f[0], f[1]);
};

这篇关于LeetCode 2786. 访问数组中的位置使分数最大的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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的路径

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序