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

题目链接

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

题目描述

给你一个下标从 0 0 0 开始的整数数组 n u m s nums nums 和一个正整数 x x x

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

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

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

注意 ,你一开始的分数为 n u m s [ 0 ] nums[0] 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 ≤ n u m s . l e n g t h ≤ 1 0 5 2 \leq nums.length \leq 10^5 2nums.length105
  • 1 ≤ n u m s [ i ] , x ≤ 1 0 6 1 \leq nums[i], x \leq 10^6 1nums[i],x106

解法一:动态规划

定义 f [ i ] [ j ] f[i][j] f[i][j] 为前 n u m s nums nums i i i 个元素,最后一个元素是奇数或者偶数 ( j = 0 , 是偶数 ; j = 1 , 是奇数 ) (j = 0,是偶数;j = 1,是奇数) (j=0,是偶数;j=1,是奇数) 的最大分数和。注意:最后一个元素不一定是第 i i i 个元素。

对于第 i i i 个元素 n u m s [ i ] nums[i] nums[i],用 k k k 表示它的奇偶性质:

  • f [ i ] [ k ] = m a x ( f [ i − 1 ] [ k ] , f [ i − 1 ] [ k x o r 1 ] − x ) + n u m s [ i ] f[i][k] = max(f[i -1][k], f[i-1][k\ xor\ 1] - x) + nums[i] f[i][k]=max(f[i1][k],f[i1][k xor 1]x)+nums[i]
  • f [ i ] [ k x o r 1 ] = f [ i − 1 ] [ k x o r 1 ] f[i][k\ xor\ 1] = f[i-1][k\ xor\ 1] f[i][k xor 1]=f[i1][k xor 1]

由于 f f f 默认下标是从 1 1 1 开始的,而 n u m s nums nums 是从 0 0 0 开始的,所以需要做下转换:

  • f [ i ] [ k ] = m a x ( f [ i − 1 ] [ k ] , f [ i − 1 ] [ k x o r 1 ] − x ) + n u m s [ i − 1 ] f[i][k] = max(f[i -1][k], f[i-1][k\ xor\ 1] - x) + nums[i - 1] f[i][k]=max(f[i1][k],f[i1][k xor 1]x)+nums[i1]
  • f [ i ] [ k x o r 1 ] = f [ i − 1 ] [ k x o r 1 ] f[i][k\ xor\ 1] = f[i-1][k\ xor\ 1] f[i][k xor 1]=f[i1][k xor 1]

注意: f f f 需要初始化为一个相对较小的数字,因为 f [ i − 1 ] [ k x o r 1 ] − x f[i-1][k\ xor\ 1] - x f[i1][k xor 1]x 是有可能小于 0 0 0 的,如果 f f f 全部初始化为 0 0 0,并且此时恰好 f [ i − 1 ] [ k ] = 0 f[i -1][k] = 0 f[i1][k]=0,最终就会得到一个错误的结果 。本来这里的答案应该是 f [ i ] [ k ] = f [ i − 1 ] [ k x o r 1 ] − x + n u m s [ i − 1 ] f[i][k] = f[i-1][k\ xor\ 1] - x + nums[i - 1] f[i][k]=f[i1][k xor 1]x+nums[i1],最终却变成了 f [ i ] [ k ] = 0 + n u m s [ i − 1 ] f[i][k] = 0 + nums[i - 1] f[i][k]=0+nums[i1]。最终结果就会比标准答案偏大。

比如这个用例:

在这里插入图片描述

时间复杂度: O ( n ) O(n) O(n)

C++代码:


using LL = long long;class Solution {
public:long long maxScore(vector<int>& nums, int x) {int n = nums.size();vector<vector<LL>> f(n + 1, vector<LL>(2, -1e18));f[1][nums[0] & 1] = nums[0];for(int i = 2;i <= n;i++){int k = (nums[i - 1] & 1);f[i][k] = max(f[i - 1][k], f[i - 1][k ^ 1] - x) + nums[i - 1];f[i][k ^ 1] = f[i - 1][k ^ 1];}return max(f[n][0], f[n][1]);}
};

解法二:动态规划 + 一维空间

我们注意到 f [ i ] [ k ] f[i][k] f[i][k] 实际只会依赖于 f [ i − 1 ] [ k ] f[i-1][k] f[i1][k] f [ i − 1 ] [ k x o r 1 ] f[i - 1][k\ xor\ 1] f[i1][k xor 1],所以我们可以直接降维,使用两个变量来模拟。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

using LL = long long;class Solution {
public:long long maxScore(vector<int>& nums, int x) {int n = nums.size();vector<vector<LL>> f(n + 1, vector<LL>(2, -1e18));f[1][nums[0] & 1] = nums[0];for(int i = 2;i <= n;i++){int k = (nums[i - 1] & 1);f[i][k] = max(f[i - 1][k], f[i - 1][k ^ 1] - x) + nums[i - 1];f[i][k ^ 1] = f[i - 1][k ^ 1];}return max(f[n][0], f[n][1]);}
};

Python3代码:

class Solution:def maxScore(self, nums: List[int], x: int) -> int:n = len(nums)f = [-inf] * 2f[nums[0] & 1] = nums[0]for i in range(1, n):k = (nums[i] & 1)f[k] = max(f[k], f[k ^ 1] - x) + nums[i]return max(f[0], f[1])

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

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

相关文章

阿里云 OpenSearch RAG 应用实践

2024年5月18日&#xff0c;阿里巴巴 OpenSearch 研发负责人刑少敏应邀参与AICon全球人工智能开发与应用大会暨大模型应用生态展&#xff0c;分享《OpenSearch RAG 应用实践》&#xff0c;介绍了阿里云OpenSearch在RAG方面的应用和探索。以下是主题演讲的逐字稿分享&#xff1a;…

Python学习之旅:你的大学计算机专业宝藏路线图

在信息时代的浪潮中&#xff0c;Python以其强大的功能和极简的语法成为了无数程序员心中的白月光。作为大学计算机专业的学生&#xff0c;掌握Python不仅能够为未来的职业生涯铺路&#xff0c;更能让您在学术研究和实际应用中如鱼得水。今天&#xff0c;我将与大家分享一套实用…

【SQL边干边学系列】08高级问题-4

文章目录 前言回顾高级问题48.客户分组49.客户分组-修复null50.使用百分比的客户分组51.灵活的客户分组 答案48.客户分组49.客户分组-修复null50.使用百分比的客户分组51.灵活的客户分组 未完待续 前言 该系列教程&#xff0c;将会从实际问题出发&#xff0c;边干边学&#xff…

LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

文章汇总 总体来看像是一种带权重的残差&#xff0c;但解决的如何高效问题的事情。 相比模型的全微调&#xff0c;作者提出固定预训练模型参数不变&#xff0c;在原本权重矩阵旁路添加低秩矩阵的乘积作为可训练参数&#xff0c;用以模拟参数的变化量。 模型架构 h W 0 x △…

31、shell循环

一、循环 循环&#xff1a;循环是一种重复执行一段代码的结构。只要满足循环的条件&#xff0c;会一直执行这个代码。 循环条件&#xff1a;在一定范围之内&#xff0c;按照指定的次数来执行循环。 循环体&#xff1a;在指定的次数内&#xff0c;执行的命令序列。只要条件满…

深入解析 Spring Cloud Seata:分布式事务的全面指南

&#x1f9e8;&#x1f9e8;&#x1f9e8;深入解析 Spring Cloud Seata&#xff1a;分布式事务的全面指南 在微服务架构中&#xff0c;分布式事务的处理是一项复杂而重要的任务。Spring Cloud Seata 是一款专为分布式事务而设计的解决方案&#xff0c;它由阿里巴巴开源&#x…

宏电“灌区哨兵”助力灌区信息化建设,开启灌区“智水”时代

灌区是保障国家粮食安全的重要水利设施。“十四五”提出&#xff0c;要推进大中型灌区节水改造和精细化管理。灌区信息化是建设智慧水利、深化行业监管、提升灌区科学管理水平的基础支撑&#xff0c;也是“十四五”期间灌区现代化改造的重点内容之一。 宏电智慧灌区信息化解决方…

2024脑卒中评估量表分享

常笑医学整理了5个常用的脑卒中评估量表&#xff0c;供临床医护工作人员参考。 Essen脑卒中风险评分量表-常笑医学网​ &#xff08;完整量表请点击量表名称查看&#xff09; Essen脑卒中风险评估量表&#xff0c;是一个简便、易于临床操作的9分量表&#xff0c;是根据氯吡格雷…

k8s nginx.conf配置文件配置

无状态nginx配置nginx.conf覆盖容器配置nginx.conf 代码&#xff1a;events {worker_connections 1024; }http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] "$request&q…

reGeorg隐秘隧道搭建

reGeorg隐秘隧道搭建 【实验目的】 通过学习reGeorg与Proxifier工具使用&#xff0c;实现外网攻击端连接内网主机远程桌面。 【知识点】 python、reGeorg、proxifier。 【实验原理】 在内网渗透中&#xff0c;由于防火墙的存在&#xff0c;导致无法对内网直接发起连接&#xff…

Linux多线程编程中的同步与互斥

文章目录 一、线程同步与互斥1、理解线程同步2、互斥的概念3、小结 二、互斥锁&#xff08;Mutex&#xff09;1、互斥锁的定义和作用2、pthread库中的互斥锁3、互斥锁的实现原理4、示例代码演示互斥锁的基本用法 三、条件变量&#xff08;Condition Variable&#xff09;1、条件…

IDEA 配置方法模板无法获取到参数值和返回值(methodParameters()、methodReturnType()获取不到值)

问题现象&#xff1a; 我在 review 同事代码时候&#xff0c;发现方法上有注释&#xff0c;但是注释上又没有方法参数和返回值&#xff0c;这不是IDEA 配置了方法模板就可以自动生成的嘛&#xff0c;我出于好奇去问了下该同事是怎么回事&#xff0c;该同事有点不好意思的说我配…

昂辉科技EasySAR-BootLoader上位机产品

近年来&#xff0c;硬件标准化、同质化和软件差异化、复杂化成为了汽车产品研发的重要趋势。与此同时&#xff0c;大量的智能化功能和快速上车的节奏&#xff0c;对软件开发提出了更高的要求。在软硬件解耦的大背景下&#xff0c;建立统一的软件体系和开发工具以紧跟硬件更新迭…

【NOI-题解】1389 - 数据分析1750 - 有0的数1457 - 子数整除1121 - “倒”数1962. 数值计算

文章目录 一、前言二、问题问题&#xff1a;1389 - 数据分析问题&#xff1a;1750 - 有0的数问题&#xff1a;1457 - 子数整除问题&#xff1a;1121 - “倒”数问题&#xff1a;1962. 数值计算 三、感谢 一、前言 本章节主要对循环中带余除法部分题目进行讲解&#xff0c;包括…

python数据分析-北京市二手住宅市场价格波动分析

一、研究背景&#xff1a; 北京市作为中国的首都和经济中心&#xff0c;房地产市场一直备受关注。二手住宅市场是房地产市场的重要组成部分&#xff0c;其价格波动不仅影响着购房者和卖房者的利益&#xff0c;也对整个经济社会的稳定和发展产生重要影响。因此&#xff0c;对北…

idea 配置文件中文乱码

再进行springboot项目开发时发现新建的配置文件中文注释乱码&#xff0c;如下: 处理办法: 1、打开idea&#xff0c;在 File 中找到 Settings,如下图 2、搜索 encodings 找到 File Encodings&#xff0c;如下图 3、将上图中圈上的地方全部改为 UTF-8 编码最后点击 Apply 应用即…

大数据同步方案怎么选,才能提高企业的业务效率?

大数据同步通常指的是在多个数据源或存储系统之间同步数据的过程&#xff0c;可以确保数据的一致性&#xff0c;提高数据的可用性和可靠性&#xff0c;同时支持数据分析和决策制定。 大数据同步的步骤通常包括&#xff1a; 数据识别&#xff1a;确定需要同步的数据类型和范围&…

爬虫-模拟登陆博客

import requests from bs4 import BeautifulSoupheaders {user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 } # 登录参数 login_data {log: codetime,pwd: shanbay520,wp-submit: …

eBay测评,自养号应该如何做?

测评自养号就是自己搭建国外的服务器和IP环境&#xff0c;实现自己注册eBay的买家账号&#xff0c;通过电脑端环境一台电脑就可以无限养号&#xff0c;一次可以开十几个窗口同时浏览下单&#xff0c;每个窗口都是独立的环境&#xff0c;一账号一环境一IP一卡 买家账号掌握在卖…

酷开科技丨酷开系统智慧中心,解锁AI智能家居生活的无限可能

想象一下&#xff0c;未来的AI电视不再是冷冰冰的机器&#xff0c;而是家庭的智能伙伴。它学习你的喜好&#xff0c;预测你的需求&#xff0c;用声音和触感与你交流。它控制家中的灯光、温度&#xff0c;甚至帮你订购生活用品。 在探索智能家居的未来发展时&#xff0c;酷开系…