力扣每日一题-3040

news2024/11/29 22:40:54

题目

给你一个整数数组 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 次操作。

思路

对于一个数组,有三种方法进行缩小,满足a+b=target时可以被删除,ab可以是第一个第二个,第一个第一个倒数第一个,倒数第一个倒数第二个。不难发现我们可以用两个下标来记录数组的头和尾,得到当前target和大小下的最优解即执行删除的最大次数

解题方法

首先要知道目标值即target,依题意可以在有三种,即有三种分支,

采用给予搜寻,(动态规划)对于每个target建立一个memo[l][r] 表示在这个target下数组由l到r的最大次数,

每次要初始化meno[][]=-1

如何更新memo里的值能用于搜索呢?

采用dfs(深度优先遍历),当数组小于2时返回,当数组在memo有记录时直接返回不然对于数据量大的样例会超时

代码


class Solution {
    private int[] nums;
    private int[][] memo;
    public int maxOperations(int[] nums) {
        this.nums=nums;
        int n=nums.length;
        memo=new int[n][n];
        int res1=maxOp(2,n-1,nums[0]+nums[1]);
        int res2=maxOp(1,n-2,nums[0]+nums[n-1]);
        int res3=maxOp(0,n-3,nums[n-1]+nums[n-2]);
        return Math.max(res1,Math.max(res2,res3))+1;

        }
    
    private int maxOp(int l,int r,int target){
        for(int[] row:memo)
        Arrays.fill(row,-1);
        return dfs(l,r,target);
    }
    private int dfs(int l,int r,int target){
        if(l>=r){
            return 0;
        }
        if(memo[l][r]!=-1){
            return memo[l][r];
        }
        
        int res=0;
        if(nums[l]+nums[l+1]==target){
            res=Math.max(res,dfs(l+2,r,target)+1);
        }
        if(nums[l]+nums[r]==target){
            res=Math.max(res,dfs(l+1,r-1,target)+1);
        }
        if(nums[r]+nums[r-1]==target){
            res=Math.max(res,dfs(l,r-2,target)+1);
        }
        return memo[l][r]=res;
        
    }
}

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

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

相关文章

SAS:PROC SQL和ANSI标准

文章来源于SAS HELP PROC SQL 和ANSI SQL 的区别——图表和视图名称的作用域规则不同 例1:匹配数据集相关名称 当PROC SQL匹配数据集相关名称时,会依次进行3个步骤:1、有别名,用别名匹配;2、1匹配失败,在无…

Spring Cloud Bus 消息总线基础入门与实践总结

【1】基础介绍 其主要是实现分布式自动刷新配置功能,Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新。Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能…

测长仪的发展历程!

测长仪的发展历程可以大致分为以下几个阶段: 早期发展: 最早的测量工具主要是一些机械式测量工具,如角尺、卡钳等。 16世纪,在火炮制造中已开始使用光滑量规。 1772年和1805年,英国的J.瓦特和H.莫兹利等先后制造出利用…

【网络安全的神秘世界】Kali 自带 Burp Suite 使用指南:字体与CA证书设置详解等

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 Kali 自带 Burp Suite 使用指南目录 Burp Suite的打开方式设置Burp Suite软件的字体大小查看Burp Suite 默认代理在火狐浏览器设置代理Burp Suite 抓不到本…

零售行业会员管理有哪些业务场景?解析不同业务场景的分析指标

在当今竞争激烈的零售市场中,会员管理不再仅仅是收集和存储数据,而是要求企业能够从数据中获取洞察,并据此制定策略。会员板块的业务场景涵盖了多个方面,每一个场景都为企业提供了一个独特的视角,帮助企业了解和服务于…

android 抓取 logcat 日志的方法

1.找到这个路径 2.然后执行命令(adb logcat -v time >.\\logcat.log),开始抓取日志 3.这个时候就可以去操作APP了,复现BUG了。 Ctrlc 结束日志抓取 adb logcat -c 清空旧日志

USB端口管控软件|USB端口控制软件有哪些(小技巧)

​USB端口管控软件成为了保障企业数据安全的重要手段。 本文将为您介绍几款知名的USB端口控制软件,并分享一些实用的小技巧,帮助您更好地管理US端口,确保企业信息安全。#usb接口# 一、USB端口控制软件推荐 1,域智盾 域智盾是一…

tmux-以脚本中的tmux命令为例解释常用tmux命令

SESSIONenv_monitor_hr_parking ----- 将会话名称env_monitor_hr_parking赋值给变量SESSION tmux new-session -s $SESSION -n runner -d ----- new-session 用于创建新的会话。-s $SESSION 是一个选项,其中 $SESSION 是你想要给你的新会话命名的名称。-n runner 是…

如何高效接入闲鱼商品详情实时数据——goodfish.item_get API接口指南

闲鱼平台,作为中国领先的二手交易平台,拥有庞大的商品数据库和用户群体。为了提供一个透明、高效的交易环境,闲鱼平台通过其商品详情API接口(goodfish.item_get)为开发者和商家提供实时的商品信息获取服务。下面将深入…

使用 Python 和 Selenium 进行网络抓取

如果你今天的工作是从竞争对手的网站上抓取定价页面信息。你会怎么做?复制粘贴?手动输入数据?当然不行!他们绝对会花费你超级多的时间,而且你可能会犯一些错误。 需要指出的是,Python已经成为最流行的数据…

超级马里奥-小游戏

学习目标: 练习Java面向对象的编程思想; 巩固Java语言基础,数据类型、集合、数组等; 深刻理解Java的三大特性,封装、继承、多态; 效果展示:

[发布]嵌入式系统远程测控软件-基于Qt

目录 一. 引言二. 软件功能2.1 原理2.2 软件功能2.3 运行环境 三. 软件操作使用3.1 软件界面3.2 软件功能使用详解3.2.1 连接3.2.2 数据监测(串口示波器)3.2.3 数据修改3.2.4 数据保存 3.3 软件的硬件连接 四. 通信协议——STM32移植篇4.1 通信协议4.2 S…

Java SE LTS版本商用收费,有那些开源的替代方案?

🚀 Java SE LTS版本商用收费,有那些开源的替代方案? 摘要 Java 对于云服务、大数据、电子商务、支付、欺诈和身份、交易等许多应用程序来说都是至关重要的语言。然而,Oracle 对 Java SE LTS 版本的商用收费政策引发了广泛关注和…

活体检验API在Java、Python、PHP中的使用教程

活体检验API是一种基于生物特征的身份验证技术,通过分析和识别用户的生物信息来确认其身份。这种技术广泛应用于各种领域,如金融、安全、社交媒体等,以提高身份验证的安全性和准确性。以下是描述”活体检验API”背景的一些关键点:…

python dropna怎么用

pandas的设计目标之一就是使得处理缺失数据的任务更加轻松些。pandas使用NaN作为缺失数据的标记。 使用dropna使得滤除缺失数据更加得心应手。 dropna常用参数: # DataFrame.dropna(axis0, howany, threshNone, subsetNone, inplaceFalse) 主要的2个参数&#xff…

首个共同祖先

题目链接 首个共同祖先 题目描述 注意点 所有节点的值都是唯一的p、q 为不同节点且均存在于给定的二叉树中 解答思路 第一种思路是后序遍历找到包含p和q时的根节点(注意可能是p或q作为根节点),对于任一节点node,会先查找其左…

win10及11暂停更新永久

windows更新永久暂停 winr 输入 regedit 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 新建 名称FlightSettingsMaxPauseDays 右击修改为9999代表禁用天数推迟,基数改16进制 点击高级选项调整截止日期,因为我一开始设置的6666所以是6666

ssldump一键分析网络流量(KALI工具系列二十二)

目录 1、KALI LINUX 简介 2、ssldump工具简介 3、在KALI中使用ssldump 3.1 目标主机IP(win) 3.2 KALI的IP 4、操作示例 4.1 监听指定网卡 4.2 指定端口 4.3 特定主机 4.4 解码文件 4.5 显示对话摘要 4.6 显示加密数据(需要私钥&…

分贝通到餐解决方案全新升级

消费小票总是神出鬼没;申请、报销驴唇不对马嘴;虚报陷阱难逐一排查 部门餐标视而不见;单笔超支屡见不鲜;规则复杂总被吐槽记不住 发票、单据多如牛毛;发票合规层出不穷;审核对账气血两亏; ...... 针对上述问题,分贝通全面升级了到餐解决方案。 从一线CBD商务区到地方县城,优…

微信服务号营销新篇章:HubSpot与MessageBox的强强联合

随着全球数字化浪潮的推进,越来越多的企业开始寻求海外市场的拓展机会。在这个过程中,微信服务号作为一个强大的数字化工具,为企业提供了无限的商业可能。本文将详细解析微信服务号的概念、功能、使用方法,以及它与HubSpot、Messa…