⭐北邮复试刷题2369. 检查数组是否存在有效划分__DP (力扣每日一题)

2369. 检查数组是否存在有效划分

给你一个下标从 0 开始的整数数组 nums ,你必须将数组划分为一个或多个 连续 子数组。

如果获得的这些子数组中每个都能满足下述条件 之一 ,则可以称其为数组的一种 有效 划分:

子数组 恰 由 2 个相等元素组成,例如,子数组 [2,2] 。
子数组 恰 由 3 个相等元素组成,例如,子数组 [4,4,4] 。
子数组 恰 由 3 个连续递增元素组成,并且相邻元素之间的差值为 1 。例如,子数组 [3,4,5] ,但是子数组 [1,3,5] 不符合要求。
如果数组 至少 存在一种有效划分,返回 true ,否则,返回 false 。

示例 1:
输入:nums = [4,4,4,5,6]
输出:true
解释:数组可以划分成子数组 [4,4] 和 [4,5,6] 。
这是一种有效划分,所以返回 true 。

示例 2:
输入:nums = [1,1,1,2]
输出:false
解释:该数组不存在有效划分。

提示:
2 <= nums.length <= 105
1 <= nums[i] <= 106

题解:

本题把握好状态定义即可 因像本题有"连续"字眼 使用DP相对更加宏观 从大问题分解为小问题着手:

⭐我们先确定好边界情况,即不妨枚举几个小数字看看
1.如果只有一张牌 则必定无法划分;
2.如果只有两张牌 则若相等则可以划分 不等则无法划分;
3.如果只有三张牌 则若前两张牌相等且第三张和前两张同则可划分 或者三张牌为顺子也可划分 不符前二者则无法划分;

因此当有四张牌时,对于第四张新加入的牌,由于为连续划分,则第四张必定是要和前面相邻的若干张去组成,而前面三张的各个情况已经确定,故我们对新加入的第四张导致的所有可能划分做出枚举判断即可。

⭐因此当四张牌时,若可以划分,则为以下几种情况成立:
1. 前4-2张为可划分 且3、4张可组成两相等元素形式;
2. 前4-3张为可划分 且2、3、4 张可组成三相等元素形式;
3. 前4-3张为可划分 且2、3、4 张可组成顺子形式;
其余情况则均为不可划分。

因此推广到n,不妨定义dp[i]为从0到下标i所有元素组成的划分情况:

⭐dp[i] = 1 代表0到i张牌 均为可划分
⭐dp[i] = -1 代表0到i张牌 为不可划分
因此对每次加入的nums[i]这张新牌判断,通过其和前1张或2张组成的情况及dp[i-2] dp[i-3]是否为可划分,来判断dp[i] 是否为可划分

代码:

class Solution {public boolean validPartition(int[] nums) {/* 本题把握好状态定义即可  因像本题有"连续"字眼 使用DP相对更加宏观 从大问题分解为小问题着手:我们先确定好边界情况,即不妨枚举几个小数字看看`因此如果只有一张牌 则必定无法划分;`如果只有两张牌 则若相等则可以划分 不等则无法划分;`如果只有三张牌 则若前两张牌相等且第三张和前两张同则可划分 或者三张牌为顺子也可划分 不符前二者则无法划分;因此当有四张牌时,对于第四张新加入的牌,由于为连续划分,则第四张必定是要和前面相邻的若干张去组成,而前面三张的各个情况已经确定,故我们对新加入的第四张导致的所有可能划分做出枚举判断即可。因此当四张牌时,若可以划分,则为以下几种情况成立:1. 前4-2张为可划分 且3、4张可组成两相等元素形式;2. 前4-3张为可划分 且2、3、4 张可组成三相等元素形式;3. 前4-3张为可划分 且2、3、4 张可组成顺子形式;其余情况则均为不可划分。因此推广到n,不妨定义dp[i]为从0到下标i所有元素组成的划分情况:dp[i] = 1 代表0到i张牌 均为可划分dp[i] = -1 代表0到i张牌 为不可划分因此对每次加入的nums[i]这张新牌判断,通过其和前1张或2张组成的情况及dp[i-2] dp[i-3]是否为可划分,来判断dp[i] 是否为可划分⭐*/int len = nums.length;int dp[] = new int[len];dp[0] = -1;if(nums[0] == nums[1])dp[1] = 1;elsedp[1] = -1;if(len == 2)return dp[1] == 1 ? true : false;if(dp[1] == 1 && nums[2] == nums[1])dp[2] = 1;else if(check(nums[0],nums[1],nums[2]))dp[2] = 1;elsedp[2] = -1;if(len == 3)return dp[2] == 1 ? true : false;for(int i=3;i<len;i++){if(dp[i-2] == 1 && nums[i-1] == nums[i]){dp[i] = 1;}else if(dp[i-3] == 1 && nums[i-1] == nums[i] && nums[i-2] == nums[i-1]){dp[i] = 1;}else if(dp[i-3] == 1 && check(nums[i-2],nums[i-1],nums[i])){dp[i] = 1;}else{dp[i] = -1;}}return dp[len-1] == 1 ? true : false;}public boolean check(int n1,int n2,int n3){if(n3 - n2 == 1 && n2 - n1 == 1)return true;return false;}
}

结果:

在这里插入图片描述

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

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

相关文章

初学arp欺骗

首先准备一台靶机这里用虚拟机的win10 已知网关与ip地址&#xff08;怕误伤&#xff09; 现在返回kali从头开始 首先探测自己的网关 然后扫内网存活的ip 发现有3台 用nmap扫一下是哪几台 成功发现我们虚拟机的ip 现在虚拟机可以正常访问网络 接下来直接开梭 ip网关 返回虚拟机…

win11部署自己的privateGpt(2024-0304)

什么是privateGpt? privategpt开源项目地址 https://github.com/imartinez/privateGPT/tree/main 官方文档 https://docs.privategpt.dev/overview/welcome/welcome PrivateGPT是一个可投入生产的人工智能项目&#xff0c;利用大型语言模型&#xff08;LLMs&#xff09;的…

智能通用平台(Intelligent General-purpose Platform)

根据2024年的最新人工智能技术发展趋势&#xff0c;我为您提出的项目需求表如下&#xff1a; 项目名称&#xff1a;智能通用平台&#xff08;Intelligent General-purpose Platform&#xff09;项目概述&#xff1a;结合最新的生成式人工智能、多模态学习和量子计算技术&#…

Windows Docker 部署 Jenkins

一、简介 今天介绍一下在 Windows Docker 中部署 Jenkins 软件。在 Windows Docker 中&#xff0c;分为两种情况 Linux 容器和 Windows 容器。Linux 容器是通常大多数使用的方式&#xff0c;Windows 容器用于 CI/CD 依赖 Windows 环境的情况。 二、Linux 容器 Linux 容器内部…

Linux系统宝塔面板搭建Typecho博客并实现公网访问本地网站【内网穿透】

文章目录 前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 Typecho是由type和echo两个词合成的&#xff0c;来自于开发团队的头脑风暴。Typecho基于PHP5开发&#xff0c;支持多种数据库&#…

Vue.js中的diff算法:让虚拟DOM更高效

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【2024.03.05】定时执行专家V7.1最新版GUI界面 - 基于wxWidgets 3.2.4 + CodeBlocks + GCC9.2.0

《定时执行专家》是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件。软件具有 25 种【任务类型】、12 种【触发器】触发方式&#xff0c;并且全面支持界面化【Cron表达式】设置。软件采用多线程并发方式检测任务触发和任务执行&#xff0c;能够达到毫秒级的执行精…

【深度学习笔记】5_5 LeNet

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 5.5 卷积神经网络&#xff08;LeNet&#xff09; 在3.9节&#xff08;多层感知机的从零开始实现&#xff09;里我们构造了一个含单隐藏…

182基于matlab的半监督极限学习机进行聚类

基于matlab的半监督极限学习机进行聚类&#xff0c;基于流形正则化将 ELM 扩展用于半监督&#xff0c;三聚类结果可视化输出。程序已调通&#xff0c;可直接运行。 182matlab ELM 半监督学习 聚类 模式识别 (xiaohongshu.com)

「滚雪球学Java」:JDBC(章节汇总)

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

C# Winform画图绘制圆形

一、因为绘制的圆形灯需要根据不同的状态切换颜色,所以就将圆形灯创建为用户控件 二、圆形灯用户控件 1、创建用户控件UCLight 2、设值用户控件大小(30,30)。放一个label标签,AutoSize为false(不自动调整大小),Dock为Fill(填充),textaglign为居中显示。 private Color R…

微服务架构SpringCloud(2)

热点参数限流 注&#xff1a;热点参数限流默认是对Springmvc资源无效&#xff1b; 隔离和降级 1.开启feign.sentinel.enabletrue 2.FeignClient(fallbackFactory) 3.创建一个类并实现FallbackFactory接口 4.加入依赖 <!--添加Sentienl依赖--><dependency><gro…

机器学习笔记 大语言模型是如何运作的?一、语料库和N-gram模型

一、语料库 语言模型、ChatGPT和人工智能似乎无处不在。了解大型语言模型(LLM)“背后”发生的事情将是驾驭数字世界的关键。 首先在提示中键入一个单词,然后点击提交。您可以尝试新的提示,并根据需要多次重新生成响应。 这个我们称之为“T&C”的语言模型是在一…

店匠科技颁布 Shoplazza Awards:品牌出海迎历史性机遇,赋能品牌腾飞

在全球化的今天&#xff0c;中国品牌在全球市场的地位日益显著&#xff0c;品牌意识的提升推动了企业出海战略的全新转型。以全球电商市场发展为例&#xff0c;根据 ecommerceBD 数据&#xff0c;2023 年全球零售电子商务销售额预计 6.3 万亿美元&#xff0c;到 2026 年&#x…

我们距离AGI还有多远?

关于HBM那份纪要的其他反馈 上篇文章发了一篇HBM纪要小部分内容&#xff08;星球更新了另一部分&#xff09;&#xff0c;收到很多业内大佬们的反馈&#xff0c;包括颗粒计算、封装订单划分等等&#xff0c;以及是不是某通某电的一个专家。其中倒是出现一个非共识的说法&#…

【论文阅读】TensoRF: Tensorial Radiance Fields 张量辐射场

发表于ECCV2022. 论文地址&#xff1a;https://arxiv.org/abs/2203.09517 源码地址&#xff1a;https://github.com/apchenstu/TensoRF 项目地址&#xff1a;https://apchenstu.github.io/TensoRF/ 摘要 本文提出了TensoRF&#xff0c;一种建模和重建辐射场的新方法。不同于Ne…

Python字符串中%d,%.f的用法

在字符串中&#xff0c;我们经常需要改变其中的一些几个字符&#xff0c;比如 第一个d%就是epoch1&#xff0c;会随着epoch的变化而变化。同理&#xff0c;后面的也是。打印出的结果就是 其中&#xff0c;epoch迭代了3次&#xff0c;从0开始。会发现 d%&#xff0c;是整数&…

12-Java享元模式 ( Flyweight Pattern )

Java享元模式 摘要实现范例 享元模式&#xff08;Flyweight Pattern&#xff09;主要用于减少创建对象的数量&#xff0c;以减少内存占用和提高性能 享元模式尝试重用现有的同类对象&#xff0c;如果未找到匹配的对象&#xff0c;则创建新对象 享元模式属于结构型模式&…

开发一套小程序所需的费用取决于多个因素

随着移动互联网的发展&#xff0c;小程序已经成为许多企业和个人推广业务和服务的重要工具。 不过&#xff0c;对于很多想要开发小程序的人来说&#xff0c;最大的疑问就是开发一套小程序要花多少钱。 这个问题的答案并不是固定的&#xff0c;因为开发一个小程序的成本取决于几…

一条SQL引起的系统不可用

一.前言 最近在运维系统&#xff0c;系统对客端突然报了403错误&#xff0c;从后台看发现了大量的慢SQL&#xff0c;导致查询超时&#xff0c;仔细分析我从来没见过那么厚颜无耻的SQL&#xff0c;一条SQL语句关联了一个大表&#xff08;6000数据&#xff09;查询了10次。我也很…