首页 > 其他分享 >Leetcode 2464. 有效分割中的最少子数组数目

Leetcode 2464. 有效分割中的最少子数组数目

时间:2024-09-22 12:02:50浏览次数:1  
标签:2464 状态 nums min 解题 数组 Leetcode dp

1.题目基本信息

1.1.题目描述

给定一个整数数组 nums。

如果要将整数数组 nums 拆分为 子数组 后是 有效的,则必须满足:

每个子数组的第一个和最后一个元素的最大公约数 大于 1,且
nums 的每个元素只属于一个子数组。
返回 nums 的 有效 子数组拆分中的 最少 子数组数目。如果不能进行有效的子数组拆分,则返回 -1。

注意:

两个数的 最大公约数 是能整除两个数的最大正整数。
子数组 是数组中连续的非空部分。

1.2.题目地址

https://leetcode.cn/problems/minimum-subarrays-in-a-valid-split/description/

2.解题方法

2.1.解题思路

动态规划

2.2.解题步骤

第一步,状态定义;dp[i]指nums中前i个元素的最小合法子数组数

第二步,状态初始化,前0个的最小组成数为0

第三步,状态转移;dp[i]=min(dp[i],dp[j-1]+1) (其中1<=j<=i并且nums[i-1]与nums[j-1]的最大公约数大于1),状态数组的最后一个值为inf,则返回-1,否则dp[-1]即为最终题解

3.解题代码

Python代码

class Solution:
    def validSubarraySplit(self, nums: List[int]) -> int:
        length=len(nums)
        # 第一步,状态定义;dp[i]指nums中前i个元素的最小合法子数组数
        dp=[inf]*(length+1)
        # 第二步,状态初始化,前0个的最小组成数为0
        dp[0]=0
        # 第三步,状态转移;dp[i]=min(dp[i],dp[j-1]+1) (其中1<=j<=i并且nums[i-1]与nums[j-1]的最大公约数大于1)
        for i in range(1,length+1):
            for j in range(1,i+1):
                if gcd(nums[i-1],nums[j-1])>1:
                    dp[i]=min(dp[i],dp[j-1]+1)
        # print(dp)
        return dp[-1] if dp[-1]!=inf else -1

4.执行结果

在这里插入图片描述

标签:2464,状态,nums,min,解题,数组,Leetcode,dp
From: https://www.cnblogs.com/geek0070/p/18425145

相关文章

  • 【LeetCode Hot 100】15. 三数之和
    题目描述回忆一下之前做过的两数之和,用的是哈希表存储已经遍历过的元素。但是本题要求返回值中不能有重复元素,因此需要去重,强行用哈希表的话,去重操作会很复杂。我们可以通过哪些方法来保证返回的数组中不包含重复的三元组?先将整个数组进行排序,可以保证答案数组中有\((a,b,c)\)......
  • leetcode 算法题目学习笔记 - 序号1
    1.两数之和https://leetcode.cn/problems/two-sum/简要说明:1.给定一个数组和一个数字2.要求找到数组中某两个元素,使得他们相加等于所给数字(将所给数字拆为数组中的某两个个元素)3.以数组形式返回两个下标否则返回空指针返回的下标没有顺序要求假设有唯一解,即只能在数组中......
  • 返回数组中的最大元素个数
    /***返回数组中的最大元素个数*约束:*数组大小1<=size<=10to5*数组元素大小1<=arrList[i]<=10to7*@paramcandles*@return*/publicstaticintbirthdayCakeCandles(List<Integer>candles){if(cand......
  • 【信号传输】DMA传输只能收到一半数据,发送123456 只能收到 123, 发送abcd只能收到ab,缓
    系列文章目录1.元件基础2.电路设计3.PCB设计4.元件焊接5.板子调试6.程序设计7.算法学习8.编写exe9.检测标准10.项目举例11.职业规划文章目录方案一、改DMA中断方案二、改数据类型方案三、改数据长度后记方案一、改DMA中断每个DMA通道都可以在DMA传......
  • 每日一题--交换数组
    题目【一维数组】交换数组作业内容将数组A中的内容和数组B中的内容进行交换。(数组一样大)答案#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ inta=0,b=0,c=0; intarr1[3]={1,2,3}; intarr2[3]={4,5,6}; intsz=sizeof(a......
  • python怎么初始化数组
    因为画图中x轴与y轴的数据通常为数组格式的数据,所以先总结一下如何初始化数组:(1)list得到数组# 通过array函数传递list对象L = [1, 2, 3, 4, 5, 6]a = np.array(L)# 若传递的是多层嵌套的list,将创建多维数组b = np.array([[1, 2, 3, 4], [5, 6, 7, ......
  • 【C++】数组案例:考试成绩统计
    要求:一个简单的二维数组使用案例,用于统计三个学生在三门课程中的考试成绩总分。代码要点:二维数组声明和初始化:intscore[3][3]:声明一个3行3列的二维数组,用于存储三个学生的三门课程成绩。初始化列表:为数组的每个元素赋初始值。总分统计:外层循环:遍历每个学生(行)。......
  • 【C++ 差分数组 前后缀分解】P7404家庭菜园
    本文涉及知识点C++差分数组C++前后缀分解P7404家庭菜园出自洛谷,我简述一下。已知数组a,长度为n(1<=n<=2e5),1<=a[i]<=1e9。一次操作如下:将a[i…j]全+1。问最少操作多少次,使得a成为山形数组,即存在k,a[0…k]严格递增,a[k…]严格递减。前后缀分解+差分数组(错误解法)n=a.......
  • C++ 使用范围 for 遍历多维数组用引用
    intmain(){constexprsize_trowCnt=3,colCnt=4;intia[rowCnt][colCnt];//使用for循环遍历初始赋值for(size_ti=0;i!=rowCnt;++i){for(size_tj=0;j!=colCnt;++j){ia[i][j]=i*colCnt+j......
  • PHP数组转树形结构,获取任意子节点的全部父节点
    /***递归无限级分类,获取任意节点下所有子孩子*@paramarray$arr*@paramint|string$pid父级节点*@paramstring$p_name父级节点名称*@paramint$level层级数*@returnarray*/functionget_tree_all_children(array$arr,int|string$pid=0,strin......