LeetCode 2786.访问数组中的位置使分数最大:奇偶分开记录(逻辑还算清晰的题解)

【LetMeFly】2786.访问数组中的位置使分数最大:奇偶分开记录(逻辑还算清晰的题解)

力扣题目链接:https://leetcode.cn/problems/visit-array-positions-to-maximize-score/

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

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

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

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

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

 

示例 1:

输入:nums = [2,3,6,1,9,2], x = 5
输出:13
解释:我们可以按顺序访问数组中的位置:0 -> 2 -> 3 -> 4 。
对应位置的值为 2 ,6 ,1 和 9 。因为 6 和 1 的奇偶性不同,所以下标从 2 -> 3 让你失去 x = 5 分。
总得分为:2 + 6 + 1 + 9 - 5 = 13 。

示例 2:

输入:nums = [2,4,6,8], x = 3
输出:20
解释:数组中的所有元素奇偶性都一样,所以我们可以将每个元素都访问一次,而且不会失去任何分数。
总得分为:2 + 4 + 6 + 8 = 20 。

 

提示:

  • 2 <= nums.length <= 105
  • 1 <= nums[i], x <= 106

解题方法:两个变量分别记录上一个位置是奇数和偶数时的最大值

每个数都大于0,并且奇偶性相同的数之间跳跃没有额外的费用(不用-x)。因此奇偶性相同的数不会间隔地跳

以奇数为例,假设有三个奇数 a a a b b b c c c,则由奇数跳到 c c c的话,一定是从 b b b跳过去的,不可能是从 a a a直接跳到 c c c。因为 a − > c a->c a>c不如 a − > b − > c a->b->c a>b>c

因此,我们只需要使用两个变量 o d d odd odd e v e n even even,分别记录上一个数为奇数或偶数时的分数最大值。遍历整数数组时有如下公式:

  • 若当前元素 t t t为奇数,则从奇数跳过来的话分数为 o d d + t odd+t odd+t,从偶数跳过来的话分数为 e v e n + t − x even+t-x even+tx,因此最大分数为 max ⁡ ( o d d + t , e v e n + t − x ) \max(odd+t, even+t-x) max(odd+t,even+tx)
  • 若当前元素 t t t为偶数,则从奇数跳过来的话分数为 o d d + t − x odd+t-x odd+tx,从偶数跳过来的话分数为 e v e n + t even+t even+t,因此最大分数为 max ⁡ ( o d d + t − x , e v e n + t ) \max(odd+t-x, even+t) max(odd+tx,even+t)

特别的,起点必须为第一个数。假设第一个数为奇数,则偶数的默认值为 − x -x x。这是因为:

第一个数为奇数的话,第一次跳到偶数的时候,实质上必定是由奇数跳过去的。而计算公式中的 e v e n + t even+t even+t是由偶数跳过去的,相当于少扣了 x x x分。

时空复杂度分析

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
typedef long long ll;
class Solution {
public:ll maxScore(vector<int>& nums, int x) {ll odd = nums[0] % 2 ? 0 : -x, even = nums[0] % 2 ? -x : 0;for (int t : nums) {if (t % 2) {odd = max(odd + t, even + t - x);}else {even = max(odd + t - x, even + t);}}return max(odd, even);}
};
Go
func max(a int64, b int64) int64 {if a > b {return a}return b
}func maxScore(nums []int, x int) int64 {odd, even := int64(0), int64(0)if nums[0] % 2 == 0 {odd = -int64(x)} else {even = -int64(x)}for _, t := range nums {if t % 2 != 0 {odd = max(odd + int64(t), even + int64(t) - int64(x))} else {even =  max(odd + int64(t) - int64(x), even + int64(t))}}return max(odd, even)
}
Java
class Solution {public long maxScore(int[] nums, int x) {long odd = nums[0] % 2 != 0 ? 0 : -x, even = nums[0] % 2 != 0 ? -x : 0;for (int t : nums) {if (t % 2 != 0) {odd = Math.max(odd + t, even + t - x);}else {even = Math.max(odd + t - x, even + t);}}return Math.max(odd, even);}
}
Python
# from typing import Listclass Solution:def maxScore(self, nums: List[int], x: int) -> int:odd, even = 0 if nums[0] % 2 else -x, -x if nums[0] % 2 else 0for t in nums:if t % 2:odd = max(odd + t, even + t - x)else:even = max(odd + t - x, even + t)return max(even, odd)

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/139688753

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

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

相关文章

如何使⽤C语⾔填充封闭图形?

一、问题 如要对封闭图形&#xff08;如两个区域的交集&#xff09;进⾏填充&#xff0c;那么怎么实现呢&#xff1f; 二、解答 填充就是⽤指定的颜⾊和图案填满⼀个封闭图形。 TC 提供了⼀个可对任意封闭图形填充的函数&#xff0c;即 floodfill( ) 。其调⽤格式如下&#xf…

Nginx部署Vue项目css文件能加载但是不生效

目录 问题描述问题解决 问题描述 Nginx部署打包后的Vue项目css文件能加载但是不生效&#xff0c; 问题解决 查看响应标头&#xff0c;发现不对劲&#xff0c; Content-Type: text/plain正确的应该是 Content-Type: text/css根本原因是nginx没有告诉浏览器正确的文件类型 所…

Kubernetes面试整理-Kubernetes 如何工作?

1. 部署应用: ● 开发者或管理员定义一组期望的状态(通常通过 YAML 文件),描述了应用包括的 pods、容器镜像、网络设置和存储要求。 ● 这些定义文件会提交给 API 服务器,存储在 etcd 中。 2. 调度: ● 当创建 pod 请求提交给 Kubernetes 时,调度器会选择一个节点来部署…

Postman接口测试/接口自动化实战教程

一、API 自动化测试 Postman 最基本的功能用来重放请求&#xff0c;并且配合良好的 response 格式化工具。 高级点的用法可以使用 Postman 生成各个语言的脚本&#xff0c;还可以抓包&#xff0c;认证&#xff0c;传输文件。 仅仅做到这些还不能够满足一个系统的开发&#x…

springboot学习小结

背景 业务上需要开发&#xff0c;组里一位前辈给我指路 spring基础 什么是spring spring提供一个容器称为spring应用上下文&#xff0c;容器里可以创建和管理组件&#xff0c;组件会在容器里装配好&#xff0c;组件也可以叫bean。 装配不由组件创建他依赖的组件&#xff0…

Python学习打卡:day05

day5 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day538、函数的初体验39、函数的基础定义语法函数的定义注意事项 40、函数的基础定义案例练习41、函数的传入参数42、函数的传入参数案例练习——升…

GEE数据融合——Landsat (collection 2,level 2 )4、5、7、8、9长时间序列影像数据融合和视频导出分析

本次我们使用Landsat (collection 2,level 2 )4、5、7、8、9数据的地标反射率数据进行融合,来实现指定区域的影像导出分析。 简介 长时间序列影像数据融合是指将Landsat影像数据集合2级2(Level 2)中的4、5、7、8和9这五个卫星的数据进行融合。具体来说,这包括将同一地…

毕业年薪30W起!25届最近5年浙江大学自动化考研院校分析

浙江大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目…

揭秘招生简章的制作方法

一年一度的招生季即将来临&#xff0c;各大院校纷纷摩拳擦掌&#xff0c;准备迎接新的学子。对于学校而言&#xff0c;招生简章是其对外宣传的重要窗口&#xff0c;它直接关系到学校的招生效果和声誉。那么&#xff0c;如何制作一份既吸引人又实用的招生简章呢&#xff1f;下面…

web前端翻页:技术探秘与未来趋势

web前端翻页&#xff1a;技术探秘与未来趋势 Web前端翻页&#xff0c;作为网页交互体验的重要组成部分&#xff0c;始终吸引着开发者的关注。其设计原理、实现技巧以及未来趋势&#xff0c;都是我们在探索前端技术时不可忽视的方面。本文将从四个方面、五个方面、六个方面和七…

GIS之arcgis系列09:arcpy实现克里金差值

矢量点数据经过克里金差值后可以转换成栅格数据&#xff0c;那么就需要了解一下什么是克里金差值。 什么是克里金法? IDW(反距离加权法)和样条函数法插值工具被称为确定性插值方法&#xff0c;因为这些方法直接基于周围的测量值或确定生成表面的平滑度的指定数学公式。第二类…

【leetcode--字母异位词分组】

class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:np collections.defaultdict(list)for st in strs:name "".join(sorted(st))np[name].append(st)return list(np.values()) collections.defaultdict(list)创建字典类型&#xff…

Git代码冲突原理与三路合并算法

Git代码冲突原理 Git合并文件是以行为单位进行一行一行合并的&#xff0c;但是有些时候并不是两行内容不一样Git就会报冲突&#xff0c;这是因为Git会帮助我们进行分析得出哪个结果是我们所期望的最终结果。而这个分析依据就是三路合并算法。当然&#xff0c;三路合并算法并不…

Flowable-决策表设计器

✨✨✨ 最好用的Flowable决策表设计器 ✨✨✨ 最好用的Flowable流程设计器 本文中内容和案例出自贺波老师的书《深入Activiti流程引擎&#xff1a;核心原理与高阶实战》&#xff0c;书中的介绍更全面、详细&#xff0c;推荐给大家。 深入Activiti流程引擎

C++ 31 之 静态成员变量

#include <iostream> #include <string.h> using namespace std;// 特点: // 1.在编译阶段就分配了内存空间 // 2.类内声明&#xff0c;在类外进行初始化 // 3.所有对象共享一份静态成员数据 class Students01{ public:static int s_a; // 静态成员变量int s_b; };…

LSS 和 BEVDepth算法解读

前言 当前BEV的研究大都基于深度学习的方法&#xff0c;从组织BEV特征信息的方式来看&#xff0c;主流方法分属两类&#xff1a;自底向上方法和自顶向下方法。 自底向上方法比较早的代表工作是LSS&#xff0c;后来BEVDet、BEVDepth等也是基于LSS的框架来进行优化。自底向上方…

ArcGIS Pro SDK 样例 - 内容

ArcGIS Pro SDK 内容 目录 ArcGIS Pro SDK 内容1 项目1.1 创建一个空项目1.2 创建具有指定名称的新项目1.3 使用 Pro 的默认设置创建新项目1.4 使用自定义模板文件新建项目1.5 使用 ArcGIS Pro 提供的模板创建工程1.6 打开现有项目1.7 获取当前项目1.8 获取当前项目的位置1.9 获…

电子画册制作与传统画册相比,有哪些优势?

在当今数字化时代&#xff0c;电子画册作为一种新兴的媒体形式&#xff0c;其制作与传统画册相比具有显著的优势。以下是对这些优势的详细探讨。 首先&#xff0c;电子画册的制作过程通常更加便捷和经济。相较于传统画册需要经历的繁琐的印刷过程&#xff0c;电子画册的制作大多…

【C++课程学习】:类和对象(拷贝构造和运算符重载)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 ✍拷贝构造&#xff1a; &#x1f349;特点一&#xff1a; &#x1f349;特点二&#xff1a; &…

(三十)Flask之wtforms库【剖析源码上篇】

每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者 &#x1f525;&#x1f525;本文已收录于Flask框架从入门到实战专栏&#xff1a;《Flask框架从入…