3040. 相同分数的最大操作数目 II Medium

给你一个整数数组 nums ,如果 nums 至少 包含 2 个元素,你可以执行以下操作中的 任意 一个:

选择 nums 中最前面两个元素并且删除它们。

 ·选择 nums 中最后两个元素并且删除它们。

 ·选择 nums 中第一个和最后一个元素并且删除它们。

一次操作的 分数 是被删除元素的和。

在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次操作。

请你返回按照上述要求 最多 可以进行的操作次数。

示例 1:

输入:nums = [3,2,1,2,3,4]
输出:3
解释:我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 ,nums = [1,2,3,4] 。
- 删除第一个元素和最后一个元素,分数为 1 + 4 = 5 ,nums = [2,3] 。
- 删除第一个元素和最后一个元素,分数为 2 + 3 = 5 ,nums = [] 。
由于 nums 为空,我们无法继续进行任何操作。

示例 2:

输入:nums = [3,2,6,1,4]
输出:2
解释:我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 ,nums = [6,1,4] 。
- 删除最后两个元素,分数为 1 + 4 = 5 ,nums = [6] 。
至多进行 2 次操作。

提示:

 ·2 <= nums.length <= 2000

 ·1 <= nums[i] <= 1000

题目大意:在规定可执行三种操作且每次操作结果相同的情况下计算最多可操作的次数。

分析:

(1)假设当操作的结果只能为k时,设dp[i][j]为数组arr[i:j]最多可执行结果为k的操作的次数。则当arr[i]+arr[i+1]=k时,dp[i][j]=max(dp[i][j],dp[i+2][j]+1);当arr[j]+arr[j-1]==k时,dp[i][j]=max(dp[i][j],dp[i][j-2]+1);当arr[i]+arr[j]=k时,dp[i][j]=max(dp[i][j],dp[i+1][j-1]+1);

(2)由(1)可知,可枚举k=nums[0]+nums[1]、k=nums[N-1]+nums[N-2]、k=nums[0]+nums[N-1]三种情况,并计算每种情况下dp[i][j-1]的值,最终结果即为dp[i][j-1]在三种情况下的最大值;

(3)由dp数组的定义可知,dp[i][j]=dp[j][i],因此可将二维数组dp压缩成长度为(1+N)*N/2的一维数组dp,节省一半的存储空间,其中二维数组下标i、j在一维数组中的下标为(1+j)*j/2+i。

class Solution {
public:vector<int> dp;int tar;bool finish;int dfs(int i,int j,vector<int>& nums){if(finish) return 0;if(i>=j){finish=true;return 0;}int id=(1+j)*j/2+i,ans=0;if(dp[id]>=0) return dp[id];if(nums[i]+nums[i+1]==tar) ans=max(ans,dfs(i+2,j,nums)+1);if(nums[j]+nums[j-1]==tar) ans=max(ans,dfs(i,j-2,nums)+1);if(nums[i]+nums[j]==tar) ans=max(ans,dfs(i+1,j-1,nums)+1);dp[id]=ans;return ans;}int maxOperations(vector<int>& nums) {int N=nums.size(),L=(1+N)*N/2;dp=vector<int>(L,-1);tar=nums[0]+nums[1];finish=false;int ans1=dfs(2,N-1,nums);dp=vector<int>(L,-1);tar=nums[0]+nums[N-1];finish=false;int ans2=dfs(1,N-2,nums);dp=vector<int>(L,-1);tar=nums[N-2]+nums[N-1];finish=false;int ans3=dfs(0,N-3,nums);return max({ans1,ans2,ans3})+1;}
};

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

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

相关文章

Elasticsearch - No mapping found for [field_name] in order to sort on

chax根据关键字Action, MD5&#xff0c;模糊索引202*.log查询 curl -u user:password -H "Content-Type: application/json" http://127.1:9200/202*.log/_search?pretty -XPOST -d {"query": {"bool": {"should": [{"bool"…

GSS7000卫星导航模拟器结合RTKLIB 接收NTRIP网络RTCM数据以输出RS232

本文聚焦&#xff0c;使用GSS7000仿真GNSS NTRIP&#xff0c;利用开源工具RTKLIB 作为NTRIP Client 接受GSS7000仿真的RTCM数据&#xff0c; 并通过STRSVR将收到的RTCM数据通过USB-RS232数据线吐出&#xff0c;并转给DUT&#xff0c;让其获得RTK -FIXED 固定解。 废话不多说&a…

DynamicExpresso:强大的动态执行C#表达式解析器

推荐一个强大动态表达式解析器&#xff0c;方便我们在项目中&#xff0c;动态执行C#脚本。 01 项目简介 DynamicExpresso内置了解析逻辑&#xff0c;它能够将.NET的lambda表达式或委托转化为C#语句&#xff0c;并在内存中的动态执行。 它不生成任何汇编&#xff0c;而是构建…

Java类与变量与方法

Java内存结构分析&#xff1a; 栈&#xff1a;存储基本数据类型、局部变量 堆&#xff1a;存放对象和数组 方法区&#xff1a;常量池()常量&#xff0c;比如字符串、加载类信息 创建对象时&#xff0c;在方法区加载类信息&#xff0c;在堆开辟空间&#xff0c;栈上的变量记录堆…

InnoDB 四大特性知道吗?

InnoDB 是 MySQL 数据库中的一种存储引擎&#xff0c;它具有许多特性&#xff0c;但通常被认为有以下几个主要特点&#xff1a; 行级锁定&#xff1a;InnoDB 支持行级锁定&#xff0c;这意味着它在处理并发事务时&#xff0c;只锁定那些需要修改的行&#xff0c;而不是整个表或…

独享IP VS 原生IP,二者的区别与定义详解

原生IP&#xff1a;原生IP是指由Internet服务提供商&#xff08;ISP&#xff09;直接分配给用户的IP地址&#xff0c;这些IP地址通常反映了用户的实际地理位置和网络连接。原生IP是用户在其所在地区或国家使用的真实IP地址&#xff0c;与用户的物理位置直接相关。在跨境电商中&…

2024教资认定报名流程,点赞收藏!

2024年要进行教资认定的宝子们提早准备 &#x1f525;教资认定网上报名流程概览 一、进入教资认定网报入口 二、进行实名核验 三、申请网报时间查询 四、个人信息维护 五、认定申请报名 &#x1f525;教资认定所需材料 1⃣️身份证 2⃣️户口本&#xff0f;居住证&#xff0f;学…

基本 MOSFET 恒流源

恒流源在电路分析练习和网络定理中占有重要地位&#xff0c;然后它们似乎或多或少消失了。。。除非你是IC设计师。尽管在典型 PCB 设计中很少遇到&#xff0c;但电流源在模拟 IC 领域却无处不在。这是因为它们 1) 用于偏置&#xff0c;2) 作为有源负载。 偏置&#xff1a; 用作…

Docker搭建可道云

Docker搭建可道云&#xff08;存储&#xff09; 文章目录 Docker搭建可道云&#xff08;存储&#xff09;介绍资源列表基础环境一、安装Docker二、配置Docker加速器三、搭建可道云私有云盘3.1、编写Dockerfile3.2、上传资源到指定目录3.3、查看目录下所有资源 四、构建镜像五、…

【学术小白成长之路】01三方演化博弈(基于复制动态方程) -基础概念与模型构建

1.演化博弈基础知识 经典博弈论起源于1944年Von Neumann和Morgenstern合著的《博弈论与经济学行为》&#xff0c;是研究理性决策者之间竞争和合作关系的数学方法。 博弈论主要研究完全理性的博弈个体为实现利益最大化而做的策略选择&#xff0c;在过去几十年取得了极大发展&am…

计算机网络--物理层

计算机网络--计算机网络概念 计算机网络--物理层 计算机网络--数据链路层 计算机网络--网络层 计算机网络--传输层 计算机网络--应用层 1. 基本概念 物理层的概念&#xff1a;物理层解决如何在在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输…

Python 如何判断一组数呈上升还是下降趋势

在数据分析和统计处理中&#xff0c;我们经常需要判断一组数的趋势是上升还是下降。这在金融市场分析、销售数据监控以及科学研究中都十分常见。本文将介绍如何使用Python来判断一组数的趋势&#xff0c;并结合实际案例进行详细阐述。 一、基本方法 判断一组数的趋势主要有以…

Python字符串操作 -- 拆分字符串(对一列数据批量操作)

先创建一个列表&#xff0c;由两段字符串组成&#xff1a; df [第一段话&#xff0c;就到此为止。,第二段话&#xff0c;下次再说&#xff1f;或者下下次。] 1.拆分后的句子&#xff0c;每个句子单独为一行 df1 [] # 创建一个空列表放拆分后的数据 for i in range(len(df…

【CS.DB】从零到精通:这可能是全网最全面最强大的SQL入门教程

文章目录 1. 什么是SQL&#xff1f;1.1 SQL的历史1.1.1 SQL的标准化过程 2. SQL基础语法2.1 数据库操作2.1.1 创建数据库2.1.2 删除数据库 2.2 表操作2.2.1 创建表2.2.2 删除表2.2.3 修改表 2.3 数据操作2.3.1 插入数据2.3.2 更新数据2.3.3 删除数据 2.4 查询数据2.4.1 基本查询…

React Native 之 expo-cli使用 (二十四)

expo-cli是用于创建、运行和部署Universal Expo和React Native应用程序的工具。 1. 安装expo-cli 命令行或终端中运行以下命令来全局安装expo-cli&#xff1a; npm install -g expo-cli # 或者使用yarn yarn global add expo-cli//安装完成后&#xff0c;你可以通过运行ex…

什么是(RAG)检索增强生成?

检索增强生成&#xff08;Retrieval-Augmented Generation&#xff09; 在人工智能领域&#xff0c;生成式模型&#xff08;Generative Models&#xff09;如语言模型&#xff08;Language Models, LMs&#xff09;&#xff0c;能够根据给定的输入生成连贯且有意义的文本。然而…

读取文件

自学python如何成为大佬(目录):自学python如何成为大佬(目录)_利用python语言智能手机的默认语言实战一-CSDN博客 在Python中打开文件后&#xff0c;除了可以向其写入或追加内容&#xff0c;还可以读取文件中的内容。读取文件内容主要分为以下几种情况&#xff1a; 1 读取指…

react 基础样式的控制(行内和className)

import ./index.cssconst style{color:red,font-size:150px }function App() {return (<div className"App"><h1>行内样式控制</h1><h1 style{{color:red,font-size:150px}} >asd </h1><span style{style} >asd </span>&l…

Docker——容器技术的发展

容器技术发展史 一、Jail时代 ​ 1979年&#xff0c;贝尔实验室发明了chroot&#xff1b;当一个系统软件编译完成之后&#xff0c;整个测试环境的变量便会发生变化&#xff1b;chroot就是将一个进程的文件系统进行隔离&#xff0c;将不同进程的的根目录发生改变&#xff1b;这…

Markdown入门语法笔记

Markdown入门语法笔记 引言 Markdown是一种轻量级的文本标记语言&#xff0c;基于“内容才是本质”的理念进行设计&#xff0c;排版格式简洁自然&#xff0c;让创作者将更多时间集中在内容创作而非排版上。Markdown在当今世界上应用非常广泛&#xff0c;论文排版、说明文档、…