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

Every day a Leetcode

题目来源:2786. 访问数组中的位置使分数最大

解法1:动态规划

状态数组:

  • dp[i][0]: 访问下标范围 [0, i] 中的元素且最后访问的元素是偶数时的最大得分;
  • dp[i][1]: 访问下标范围 [0, i] 中的元素且最后访问的元素是奇数时的最大得分。

初始化:

  1. 如果 nums[0] 是奇数:dp[0][0] = INT_MIN,dp[0][1] = nums[0];
  2. 如果 nums[0] 是偶数:dp[0][0] = nums[0],dp[0][1] = INT_MIN。

状态转移:

  1. 如果 nums[i] 是奇数:
    • dp[i][0] = dp[i - 1][0]
    • dp[i][1] = max(dp[i - 1][0] - x, dp[i - 1][1]) + nums[i]
  2. 如果 nums[i] 是偶数:
    • dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - x) + nums[i]
    • dp[i][1] = dp[i - 1][1]

答案:max(dp[n - 1][0], dp[n - 1][1])。

代码:

/** @lc app=leetcode.cn id=2786 lang=cpp** [2786] 访问数组中的位置使分数最大*/// @lc code=start
class Solution
{
public:long long maxScore(vector<int> &nums, int x){// 特判if (nums.empty())return 0;if (x == 0)return accumulate(nums.begin(), nums.end(), 0LL);int n = nums.size();// 状态数组// dp[i][0]: 访问下标范围 [0, i] 中的元素且最后访问的元素是偶数时的最大得分// dp[i][1]: 访问下标范围 [0, i] 中的元素且最后访问的元素是奇数时的最大得分vector<vector<long long>> dp(n, vector<long long>(2, 0));// 初始化if (nums[0] % 2){dp[0][0] = INT_MIN;dp[0][1] = nums[0];}else{dp[0][0] = nums[0];dp[0][1] = INT_MIN;}// 状态转移for (int i = 1; i < n; i++){if (nums[i] % 2){dp[i][0] = dp[i - 1][0];dp[i][1] = max(dp[i - 1][0] - x, dp[i - 1][1]) + nums[i];}else{dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - x) + nums[i];dp[i][1] = dp[i - 1][1];}}return max(dp[n - 1][0], dp[n - 1][1]);}
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(n),其中 n 是数组 nums 的长度。

解法2:动态规划 - 空间优化

我们发现,dp[i][0] 和 dp[i][1] 只取决于它们前面的两个值:dp[i - 1][0] 和 dp[i - 1][1],因此可以可以优化。

代码:

// 动态规划 - 空间优化class Solution
{
public:long long maxScore(vector<int> &nums, int x){// 特判if (nums.empty())return 0LL;if (x == 0)return accumulate(nums.begin(), nums.end(), 0LL);int n = nums.size();long long odd = nums[0] % 2 ? nums[0] : INT_MIN;  // 奇数long long even = nums[0] % 2 ? INT_MIN : nums[0]; // 偶数// 状态转移for (int i = 1; i < n; i++){if (nums[i] % 2)odd = max(odd, even - x) + nums[i];elseeven = max(odd - x, even) + nums[i];}return max(odd, even);}
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(1)。

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

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

相关文章

html5+css3胶囊按钮代码

效果 代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title></title> <style> /* 胶囊开关的样式 */ .switch { position: relative; display: inline-block; width: 6…

EasyExcel操作Excel表格

一、EasyExcel介绍 1.1 介绍 EasyExcel 是一个基于 Java 的简单易用的 Excel 文件读写工具&#xff0c;它提供了一种简单而又高效的方式来读取、写入和操作 Excel 文件。EasyExcel 是阿里巴巴开源的项目&#xff0c;它旨在简化开发人员处理 Excel 文件的流程&#xff0c;使得…

API网关架构设计与实现的经验总结与实践

API网关是现代微服务架构中的重要组件&#xff0c;它充当了前端和后端微服务之间的中介。本文将介绍API网关的架构设计原则和实现方法&#xff0c;以帮助开发人员更好地理解和应用这些技术。 1. 什么是API网关&#xff1f; - 解释了API网关的基本概念和作用&#xff0c;以及…

【Spring框架】Spring事务的原理

目录 〇、对类或方法的Spring事务属性进行解析 0.1 解析标签 0.2 注册 InfrastructureAdvisorAutoProxyCreator 0.3 判断目标方法是否适合 canApply 0.4 匹配标签 match 0.5 小结 一、Spring事务的实现 1.1 准备事务 1.1.1 收集Transactional注解属性信息&#xff0c;…

美创科技与河南金融信创生态实验室签署战略合作协议

2024年1月31日&#xff0c;由普惠通科技与河南省科学院物理所、北京交通大学、中国金融电子化集团重庆金融认证中心联合发起成立中部地区第一家金融信创生态实验室运营公司&#xff08;即河南豫科普惠通信创科技有限公司&#xff09;与杭州美创科技股份有限公司战略合作签约仪式…

探索Xposed框架:个性定制你的Android体验

探索Xposed框架&#xff1a;个性定制你的Android体验 1. 引言 在当今移动设备市场中&#xff0c;Android系统作为最受欢迎的操作系统之一&#xff0c;其开放性和可定制性备受用户青睐。用户希望能够根据个人喜好和需求对其设备进行定制&#xff0c;以获得更符合自己习惯的使用…

深度学习自然语言处理(NLP)模型BERT:从理论到Pytorch实战

文章目录 深度学习自然语言处理&#xff08;NLP&#xff09;模型BERT&#xff1a;从理论到Pytorch实战一、引言传统NLP技术概览规则和模式匹配基于统计的方法词嵌入和分布式表示循环神经网络&#xff08;RNN&#xff09;与长短时记忆网络&#xff08;LSTM&#xff09;Transform…

谷歌 DeepMind 联合斯坦福推出了主从式遥操作双臂机器人系统增强版ALOHA 2

谷歌 DeepMind 联合斯坦福推出了 ALOHA 的增强版本 ——ALOHA 2。与一代相比&#xff0c;ALOHA 2 具有更强的性能、人体工程学设计和稳健性&#xff0c;且成本还不到 20 万元人民币。并且&#xff0c;为了加速大规模双手操作的研究&#xff0c;ALOHA 2 相关的所有硬件设计全部开…

Elasticsearch:通过 ingest pipeline 对大型文档进行分块

在我之前的文章 “Elasticsearch&#xff1a;使用 LangChain 文档拆分器进行文档分块” 中&#xff0c;我详述了如何通过 LangChain 对大的文档进行分块。那个分块的动作是通过 LangChain 在 Python 中进行实现的。对于使用版权的开发者来说&#xff0c;我们实际上是可以通过 i…

问题:老年人心理健康维护与促进的原则为________、________、发展原则。 #媒体#知识分享

问题&#xff1a;老年人心理健康维护与促进的原则为________、________、发展原则。 参考答案如图所示

[SAP] ABAP代码程序美化器大小写格式化设置

按照ABAP开发的规范&#xff0c;ABAP源代码里推荐将所有的关键字大写&#xff0c;其余ABAP变量小写 我们可以手动修改上述代码大小写规范的问题&#xff0c;但如果代码量很多的情况下&#xff0c;手动确保这个规范(所有的关键字大写&#xff0c;其余ABAP变量小写)有点费事&…

k8s -ingress

概念 Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由&#xff0c;ingress能代理集群为内部的网络&#xff0c;将集群外部的HTTP/HTTPS网络请求转发至不同的service&#xff0c;其本质就是创建一个NodePort类型的svc,和一个nginx 组成 k8s中的ingress 其实是指…

Go语言的100个错误使用场景(30-40)|数据类型与字符串使用

前言 大家好&#xff0c;这里是白泽。 《Go语言的100个错误以及如何避免》 是最近朋友推荐我阅读的书籍&#xff0c;我初步浏览之后&#xff0c;大为惊喜。就像这书中第一章的标题说到的&#xff1a;“Go: Simple to learn but hard to master”&#xff0c;整本书通过分析100…

数据结构-->线性表-->单链表

链表的定义 链表&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 与顺序表不同的是&#xff0c;链表里的每节都是独立申请下来的空间&#xff0c;我们称之为“节点、结点”。 节点的组成主要由…

【深度学习】:滴滴出行-交通场景目标检测

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主&#xff0c;接实验技术指导1对1 有任…

C++学习Day04之单例模式

目录 一、程序及输出1.1 饿汉式实例1.2 饿汉式单例1.3 懒汉式单例1.4 线程安全的懒汉式单例 二、分析与总结 一、程序及输出 1.1 饿汉式实例 #include<iostream> using namespace std; #include <string> class Printer { public:static Printer * getInstance()…

零基础学编程怎么入手,中文编程工具构件箱之渐变背景构件用法教程,系统化的编程视频教程上线

零基础学编程怎么入手&#xff0c;中文编程工具构件箱之渐变背景构件用法教程&#xff0c;系统化的编程视频教程上线 一、前言 今天给大家分享的中文编程开发语言工具资料如下&#xff1a; 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例…

Python速成篇(基础语法)下(新年快乐♥)

引言 一天不学编程手就痒&#xff0c;今天是除夕&#xff0c;学C艹vector的话就没时间出去玩了&#xff0c;所以就写写博客。今天要讲的内容是关于&#xff0c;list&#xff08;列表&#xff09;&#xff0c;tuple&#xff08;元组&#xff09;&#xff0c;字典&#xff08;di…

005集——shp格式数据转换乱码问题——arcgis

shp数据格式与其他数据格式转换过程中会遇到乱码等问题&#xff0c;原因如下&#xff1a; 在Shapefile头文件&#xff08;dBase Header&#xff09;中&#xff0c;一般会包含字符编码信息&#xff0c;这个信息称为 LDID &#xff08; Language Driver ID&#xff09;。在使用ar…

python3 获取某个文件夹所有的pdf文件表格提取表格并一起合并到excel文件

下面是一个完整的示例&#xff0c;其中包括了merge_tables_to_excel函数的定义&#xff0c;并且假设该函数的功能是从每个PDF文件中提取第一个表格并将其合并到一个Excel文件中&#xff1a; import os from pathlib import Path import pandas as pd import pdfplumber …