【动态规划刷题 14】最长递增子序列 摆动序列

news2024/11/25 23:18:36

673. 最长递增子序列的个数

链接: 673. 最长递增子序列的个数
给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。

注意 这个数列必须是 严格 递增的。

示例 1:

输入: [1,3,5,4,7]
输出: 2
解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。
示例 2:

输入: [2,2,2,2,2]
输出: 5
解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。

1.状态表示*
我们解决这个问题需要两个状态,⼀个是「⻓度」,⼀个是「个数」:

len[i] 表⽰:以 i 为结尾的最⻓递增⼦序列的⻓度;
count[i] 表⽰:以 i 为结尾的最⻓递增⼦序列的个数

2.状态转移方程
对于len[i],很容易可以得出其状态转移方程,可以参考之前的题解。
对于count[i]:
在知道每⼀个位置结尾的最⻓递增⼦序列的⻓度时,count[i] :

  1. i. 我们此时已经知道 len[i] 的信息,还知道 [0, i - 1] 区间上的 count[j] 信 息,⽤ j 表⽰ [0, i - 1] 区间上的下标;
  2. ii. 我们可以再遍历⼀遍 [0, i - 1] 区间上的所有元素,只要能够构成上升序列,并且上 升序列的⻓度等于 dp[i],那么我们就把 count[i] 加上 count[j] 的值。这样循 环⼀遍之后, count[i] 存的就是我们想要的值。

3. 初始化
◦ 对于 len[i] ,所有元素⾃⼰就能构成⼀个上升序列,直接全部初始化为 1 ;
◦ 对于 count[i] ,全部初始化为 1 ;

4. 填表顺序
显⽽易⻅,填表顺序「从左往右」

5. 返回值
⽤ maxLen 表⽰最终的最⻓递增⼦序列的⻓度。
根据题⽬要求,我们应该返回所有⻓度等于 maxLen 的⼦序列的个数」。

代码:

 int findNumberOfLIS(vector<int>& nums) {
         int n=nums.size();

        vector<int> dp(n,1),count(n,1);
        int Count=1;
        int Max=1;
        for(int i=1;i<n;i++)
        {
            for(int j=0;j<i;j++)
            {
                if(nums[i]>nums[j])
                {  
                    if(dp[j]+1==dp[i])
                    {
                        count[i]+=count[j];
                    }
                    if(dp[j]+1>dp[i])
                    {
                        dp[i]=dp[j]+1;
                        count[i]=count[j];
                    }
                }
            }
            if(Max==dp[i]) Count+=count[i];
            if(Max<dp[i]) 
            {
                Max=dp[i];
                Count=count[i];
            } 
        }
        return Count;

    }

在这里插入图片描述

646. 最长数对链

链接: 646. 最长数对链

给你一个由 n 个数对组成的数对数组 pairs ,其中 pairs[i] = [lefti, righti] 且 lefti < righti 。

现在,我们定义一种 跟随 关系,当且仅当 b < c 时,数对 p2 = [c, d] 才可以跟在 p1 = [a, b] 后面。我们用这种形式来构造 数对链 。

找出并返回能够形成的 最长数对链的长度 。

你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。

示例 1:

输入:pairs = [[1,2], [2,3], [3,4]]
输出:2
解释:最长的数对链是 [1,2] -> [3,4] 。
示例 2:

输入:pairs = [[1,2],[7,8],[4,5]]
输出:3
解释:最长的数对链是 [1,2] -> [4,5] -> [7,8] 。

解法思路

在⽤动态规划结局问题之前,应该先把数组排个序。因为我们在计算 dp[i] 的时候,要知道所有左区间⽐ pairs[i] 的左区间⼩的链对。排完序之后,只⽤
「往前遍历⼀遍」即可。

1.状态表示*
dp[i] 表⽰以 i 位置的数对为结尾时,最⻓数对链的⻓度

2.状态转移方程
对于 dp[i] ,遍历所有 [0, i - 1] 区间内数对⽤ j 表⽰下标,找出所有满⾜ pairs[j]
[1] < pairs[i][0] 的 j 。找出⾥⾯最⼤的 dp[j] ,然后加上 1 ,就是以 i 位置为结
尾的最⻓数对链。

3. 初始化
◦刚开始的时候,全部初始化为 1

4. 填表顺序
显⽽易⻅,填表顺序「从左往右」

5. 返回值
返回整个 dp 表中的最⼤值

代码:

int findLongestChain(vector<vector<int>>& pairs) {
         int n=pairs.size();

        sort(pairs.begin(),pairs.end());
        vector<int> dp(n,1);

        int len=1;
        for(int i=1;i<n;i++)
        {
            for(int j=0;j<i;j++)
            {
                if(pairs[i][0]>pairs[j][1])
                {
                    dp[i]=max(dp[i],dp[j]+1);
                }
            }
            len=max(len,dp[i]);
        }
        return len;

    }

在这里插入图片描述

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

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

相关文章

【校招VIP】产品工作难点之如何平衡团队协作

考点介绍&#xff1a; 对于简历上有实习经验的同学&#xff0c;团队配合和项目推进是一个非常常见的提问点。产品经理经常会面临项目延期&#xff0c;无法上线的情况。基于此&#xff0c;产品经理应该做些什么来保障项目按时上线呢? 产品工作难点之如何平衡团队协作-相关题目…

Linux下创建普通用户遇到的问题及解决办法

在Linux下只有root一个超级用户&#xff0c;但是可以创建多个普通用户的&#xff0c;具体的创建方法如下。 先切换到root用户&#xff0c;使用下面的命令创建用户名为user1(本文均以此用户名为例&#xff0c;注意后续键入指令时不要弄错了)的普通用户。 su root useradd user1 …

interview4-集合篇

一、算法复杂度分析 为什么要进行复杂度分析&#xff1f;因为可以指导你编写出性能更优的代码和评判别人写的代码的好坏。 &#xff08;1&#xff09;时间复杂度分析 时间复杂度是用来评估代码的执行耗时的。 1.假如每行代码的执行耗时一样&#xff1a;1ms 2.分析这段代码总…

跟随算网超人,深度解析算力网络!

随着数字时代全面开启 算力网络已成为当下热点议题 作为信息社会两大基石 算力、网络为何如此重要&#xff1f; 又将如何影响社会发展脉动&#xff1f; 为帮助大家深入了解算力网络 我们特别推出“算网超人”系列科普 下面&#xff0c;请跟随算网超人的步伐 来到该系列的…

uni-app H5使用 tabbars切换,echartst图表变小 宽度只有100px问题解决

问题&#xff1a; 跳转到别tabbars页面之后&#xff0c;再回来&#xff0c;echarts图显示缩小小团子。 原因分析&#xff1a; 在tabs切换中有echarts的话&#xff0c;我们会发现初始化的那个echarts是有宽度的&#xff0c;当点击tabs切换之后&#xff0c;切换过来的echarts只…

Python+requests编写的自动化测试项目

框架产生目的&#xff1a;公司走的是敏捷开发模式&#xff0c;编写这种框架是为了能够满足当前这种发展模式&#xff0c;用于前后端联调之前&#xff08;后端开发完接口&#xff0c;前端还没有将业务处理完毕的时候&#xff09;以及日后回归阶段&#xff0c;方便为自己腾出学(m…

Biome-BGC生态系统模型与Python融合技术:揭秘未来生态预测新趋势

Biome-BGC是利用站点描述数据、气象数据和植被生理生态参数&#xff0c;模拟日尺度碳、水和氮通量的有效模型&#xff0c;其研究的空间尺度可以从点尺度扩展到陆地生态系统。 在Biome-BGC模型中&#xff0c;对于碳的生物量积累&#xff0c;采用光合酶促反应机理模型计算出每天…

手机提词器有哪些?简单介绍这一款

手机提词器有哪些&#xff1f;手机提词器在现代社会中越来越受欢迎&#xff0c;原因是它可以帮助人们提高演讲和朗读的效果。使用手机提词器可以让人们更加自信地面对演讲和朗读&#xff0c;不至于出现口误或读错字的情况。此外&#xff0c;手机提词器还可以帮助人们节省时间和…

了解稀疏数组

稀疏数组&#xff08;一种数据结构&#xff09; package com.mypackage.array;public class Demo08 {public static void main(String[] args) {//1.创建一个二维数组 11*11// 0&#xff1a;没有棋子 1&#xff1a;黑棋 2&#xff1a;白棋int[][] array1 new int[11][11];…

OpenCV(四十一):图像分割-分水岭法

1.分水岭方法介绍 OpenCV 提供了分水岭算法&#xff08;Watershed Algorithm&#xff09;的实现&#xff0c; 使用分水岭算法对图像进行分割&#xff0c;将图像的不同区域分割成互不干扰的区域。分水岭算法模拟了水在图像中的扩散和聚集过程&#xff0c;将标记的边界被看作是阻…

Android Shadow 插件化原理演示

工程目录图 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;LearnShadow

【Linux指令】Centos7 touch修改Access/Modify/Change 时间与恢复系统时间

文章目录 前言正文1. 查看文件状态2.只更新Access Time2.只更新Modify Time3. 修改Acess Time 与Modify Time为指定时间4. 修改Change时间5. 恢复系统时间 总结 前言 本篇主要讲解touch与时间相关的操作&#xff0c;关于touch创建文件&#xff0c;就不再赘述。 正文 1. 查看…

IP地址定位基础数据采集

在互联网时代&#xff0c;IP地址定位技术已经成为了广泛应用的一项重要技术。无论是用于网络安全、广告投放、市场调研还是用户体验优化&#xff0c;IP地址定位技术都发挥着关键作用。 什么是IP地址定位&#xff1f; IP地址定位是一种技术&#xff0c;它通过IP地址来确定设备…

行云管家全面适配信创国产化平台 助力政企信创环境下数字化转型与安全运维

近日&#xff0c;作为云计算管理及信息安全领域优秀的产品服务提供商&#xff0c;深圳市行云绽放科技有限公司宣布旗下行云管家系列产品已全面适配信创国产化平台&#xff0c;包括CPU、服务器、数据库、浏览器等&#xff0c;为政企客户提供符合信创环境要求的云计算管理与信息安…

排序算法-堆排序

思路 堆排序(Heapsort)是指利用堆积树&#xff08;堆&#xff09;这种数据结构所设计的一种排序算法&#xff0c;它是选择排序的一种。它是通过堆 来进行选择数据。需要注意的是排升序要建大堆&#xff0c;排降序建小堆。 我们先将要排序的数据建成堆&#xff0c;然后通…

【数据分享】上海市道路中心线数据(无需转发\单线\shp格式)

道路数据是我们在各项研究中经常使用的数据&#xff0c;我们一般获取到的数据都是多线道路&#xff08;也就是一条道路上有多条线来表示&#xff09;&#xff0c;这种多线道路并不适用于交通网络分析等操作中&#xff0c;很多时候我们需要单线道路数据&#xff0c;也就是道路中…

基于协同过滤算法的旅游推荐系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

接口自动化测试中解决接口间数据依赖

在实际的测试工作中&#xff0c;在做接口自动化测试时往往会遇到接口间数据依赖问题&#xff0c;即API_03的请求参数来源于API_02的响应数据&#xff0c;API_02的请求参数又来源于API_01的响应数据。 因此通过自动化方式测试API_03接口时&#xff0c;需要预先请求API_02接口&a…

马来西亚市场最全开发攻略

东盟有十个国家&#xff0c;人口接近6亿&#xff0c;已连续13年成为我国最大贸易伙伴之一。数据显示&#xff0c;1-7月中国与东盟贸易总值为3.59万亿元&#xff0c;同比增长2.8%。东盟成员国中&#xff0c;与中国前三大贸易伙伴依次为越南、马来西亚和印度尼西亚。 今天来聊一…

2023.8.13百度之星(第二场)第一题官方题解注释说明

第一题&#xff1a;星际航行 #include<bits/stdc.h> using namespace std; int n, a[3][100010]; int tmp[100010]; long long calc(int *a,int opt){//opt等于0表示回合到同一个点花费的最小代价&#xff0c;opt等于1表示将数列排序成连续的整数数列for(int i1;i<n;i…