【Java每日一题】2.和数最大操作II-动态规划

题目难度:中等

主要提升:for循环思想、动态规划思想、数组操作

一、题目描述:

给你一个整数数组 nums ,如果 nums 至少包含 2 个元素,你可以执行以下操作中的任意一个
(1)选择 nums 中最前面两个元素并且删除它们。
(2)选择 nums 中最后两个元素并且删除它们。
(3)选择 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 次操作。

三、思路:

要使用动态规划的思想,对于三种情况分别进行计算,返回最优解为最大次数。

四、代码:

参考Leetcode:

class Solution {int[] nums;int[][] memo;public int maxOperations(int[] nums) {// 初始化变量int n = nums.length; // 获取输入数组的长度this.nums = nums; // 将输入数组赋值给类的成员变量this.memo = new int[n][n]; // 创建一个二维数组用于记忆化搜索int res = 0; // 初始化结果变量为0// 尝试三种不同的操作并取最大值res = Math.max(res, helper(0, n - 1, nums[0] + nums[n - 1]));res = Math.max(res, helper(0, n - 1, nums[0] + nums[1]));res = Math.max(res, helper(0, n - 1, nums[n - 2] + nums[n - 1]));return res; // 返回最终结果}public int helper(int i, int j, int target) {// 重置记忆化数组for (int k = 0; k < nums.length; k++) {Arrays.fill(memo[k], -1);}// 调用深度优先搜索函数return dfs(i, j, target);}public int dfs(int i, int j, int target) {// 递归终止条件if (i >= j) {return 0;}// 如果已经计算过这个子问题,直接返回记忆化的结果if (memo[i][j] != -1) {return memo[i][j];}// 初始化答案为0int ans = 0;// 检查三种可能的操作if (nums[i] + nums[i + 1] == target) {ans = Math.max(ans, dfs(i + 2, j, target) + 1);}if (nums[j - 1] + nums[j] == target) {ans = Math.max(ans, dfs(i, j - 2, target) + 1);}if (nums[i] + nums[j] == target) {ans = Math.max(ans, dfs(i + 1, j - 1, target) + 1);}// 记忆化当前的结果memo[i][j] = ans;// 返回答案return ans;}
}

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

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

相关文章

Java学习-JDBC(一)

JDBC 概念 JDBC(Java Database Connectivity)Java数据库连接JDBC提供了一组独立于任何数据库管理系统的APIJava提供接口规范&#xff0c;由各个数据库厂商提供接口的实现&#xff0c;厂商提供的实现类封装成jar文件&#xff0c;也就是我们俗称的数据库驱动jar包JDBC充分体现了…

什么是虚拟局域网?快解析有哪些的虚拟化应用功能?

什么是虚拟局域网&#xff1f;从字面上理解就是不是真实存在的局域网。虚拟局域网是将网络用户和设备集中在一起&#xff0c;从而可以对不同地域和商业的需要有一定的支持性。虚拟局域网有它的优点&#xff0c;在使用过程中可以为企业提供更安全、更稳定、更灵活的服务保障体系…

记录jenkins pipeline ,git+maven+sonarqube+打包镜像上传到阿里云镜像仓库

1、阶段视图&#xff1a; 2、准备工作 所需工具与插件 jdk&#xff1a;可以存在多版本 maven&#xff1a;可以存在多版本 sonar-scanner 凭证令牌 gitlab&#xff1a;credentialsId sonarqube:配置在sonarqube208服务中 3、jenkinsfile pipeline {agent anystages {stage(从…

ugpowermill编程入门:从基础到进阶的全面解析

ugpowermill编程入门&#xff1a;从基础到进阶的全面解析 在制造行业中&#xff0c;UG PowerMill编程是一款广泛应用的数控编程软件&#xff0c;它以其高效、精确的加工能力深受工程师们的喜爱。对于初学者来说&#xff0c;如何快速入门并熟练掌握UG PowerMill编程技能是一项重…

Mac怎么读取内存卡 Mac如何格式化内存卡

在今天的数字化时代&#xff0c;内存卡已经成为了我们生活中不可或缺的一部分。对于Mac电脑用户而言&#xff0c;正确地读取和管理内存卡中的数据至关重要。下面我们来看看Mac怎么读取内存卡&#xff0c;Mac如何格式化内存卡的相关内容。 一、Mac怎么读取内存卡 苹果电脑在读…

Base64 编码表 参考

Base64的编码是由下面的64个字符加上一个垫字符"" 一共65个字符集来完成的&#xff0c;他用 4 个 base64 字符去表示 3 个 ASCII 码字符。 Base64字符串判断可参考 golang判断字符串是否base64编码的字符串算法&#xff0c; 可准确判断是或否 附带单元测试用例和模糊…

Python中__面向对象__学习 (上)

目录 一、类和对象 1.类的定义 2.根据对象创建类 二、构造和析构 1.构造方法 &#xff08;1&#xff09;不带参数的构造方法 &#xff08;2&#xff09;带参数的构造方法 2.析构方法 三、重载 1.定制对象的字符串形式 &#xff08;1&#xff09;只重载__str__方法 …

QT Udp广播实现设备发现

测试环境 本文选用pc1作为客户端&#xff0c;pc2&#xff0c;以及一台虚拟机作为服务端。 pc1,pc2(客户端&#xff09;: 虚拟机&#xff08;服务端)&#xff1a; 客户端 原理&#xff1a;客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网…

了解Java内存模型(Java Memory Model, JMM)

了解Java内存模型&#xff08;Java Memory Model, JMM&#xff09; Java内存模型&#xff08;Java Memory Model, JMM&#xff09;是Java语言规范中规定的一组规则&#xff0c;定义了多线程程序中变量&#xff08;包括实例字段、静态字段和数组元素&#xff09;的访问方式。JM…

git 大文件上传失败 Please remove the file from history and try again.

根据提示执行命令 --- 查找到当前文件 git rev-list --objects --all | grep b24e74b34e7d482e2bc687e017c8ab28cd1d24b6git filter-branch --tree-filter rm -f 文件名 --tag-name-filter cat -- --all git push origin --tags --force git push origin --all --force

Fort Firewall防火墙工具v3.12.13

软件介绍 Fort Firewall是一款开源系统的免费防火墙&#xff0c;体积小巧、占用空间不大&#xff0c;可以为用户的电脑起到保护作用&#xff0c;该软件可以控制程序访问网络&#xff0c;控制用户的电脑网速&#xff0c;用户可以更轻松便捷的进行网络安全防护&#xff0c;保护系…

c# Attribute特性示范

[MyCustomAttribute("Example")] 中括号写在类前&#xff0c;表示此类具有此特性。 ”property” 译为“属性 Attribute用特性描述 using System;// 定义一个自定义特性 public class MyCustomAttribute : Attribute {public string Value { get; set; }public My…

什么是镜像源

镜像源在计算机领域中是一个重要的概念&#xff0c;下面我将用分点的方式清晰解释镜像源的定义、作用以及特点&#xff1a; 1. 定义 镜像源&#xff08;Mirror&#xff09;&#xff1a;是一个服务器&#xff0c;它存储了另一个服务器上的某些或全部内容的副本。这些内容可以包…

Sony前端连接功放:深度解析与实用指南

Sony前端连接功放&#xff1a;深度解析与实用指南 在音响设备连接中&#xff0c;Sony前端与功放的连接常常是一个令人困惑却又至关重要的环节。本文将从四个方面、五个方面、六个方面和七个方面详细解析Sony前端连接功放的步骤、技巧及注意事项&#xff0c;旨在帮助读者轻松完…

计算机网络 —— 网络层(IP数据报)

计算机网络 —— 网络层&#xff08;IP数据报&#xff09; 网络层要满足的功能IP数据报IP数据报格式IP数据报首部格式数据部分 IP数据报分片 我们今天进入网络层的学习。 网络层要满足的功能 网络层作为OSI模型中的第三层&#xff0c;是计算机网络体系结构的关键组成部分&…

实验六、IPv4 地址的子网划分,第 2 部分《计算机网络》

你有没有发现&#xff0c;困的时候真的清醒不了。 目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 完成本练习之后&#xff0c;您应该能够确定给定 IP 地址和子网掩码的子网信息。 知道 IP 地址、网络掩码和子网掩码后&#xff0c;您应该能够确定有关该 IP 地…

SpringBoot实现参数校验拦截(采用AOP方式)

一、AOP是什么&#xff1f; 目的&#xff1a;分离横切关注点&#xff08;如日志记录、事务管理&#xff09;与核心业务逻辑。 优势&#xff1a;提高代码的可读性和可维护性。 关键概念 切面&#xff08;Aspect&#xff09;&#xff1a;包含横切关注点代码的模块。通知&#xff…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 运输时间(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 运输时间(200分) 🌍 评测功能需要订阅专栏后私信联系清隆解…

【面试干货】索引的优缺点

【面试干货】索引的优缺点 1、创建索引可以大大提高系统的性能&#xff08;**优点**&#xff09;2、增加索引也有许多不利的方面&#xff08;**缺点**&#xff09; &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、创建索引可以大大提高系…

LiDAR360MLS 7.2.0 雷达点云数据处理软件功能介绍

新增模块和功能: 支持手持、背包数据的解算 SLAM解算成功率提升 SLAM解算效率提升 采集端与后处理端保持一致 赋色优化 新增平面图模块 新增平面图全自动矢量化功能 新增平面图矢量一键导出DXF功能 新增平面图正射影像一键导出功能 支持交叉、垂直绘制 支…