当前位置: 首页 > news >正文

最长上升子序列LIS(一般+优化)

1. 题目

题目链接:

B3637 最长上升子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

输入样例:

6
1 2 4 1 3 4

输出样例:

4

说明/提示:

分别取出 1、2、3、4 即可。

2. 具体实现

2.1 一般做法

   dp[i]表示第i个位置的最长上升子序列个数

//思路:
//dp[i]表示第i个位置的最长子序列个数
//dp[i]也就是找到前面1到i-1位置上值小于a[i]的最大dp值 
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N],dp[N]; 
int main(void){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];dp[i]=1;}int res=1;for(int i=2;i<=n;i++){int tmax=0;for(int j=1;j<i;j++){  //遍历前i-1项,找到值<a[i]的最大dp值 if(a[i]>a[j]) tmax=tmax>dp[j]?tmax:dp[j];}dp[i]=tmax+1;res=max(res,dp[i]);}cout<<res; return 0;
} 
  • 时间复杂度: O(n^2)
  • 空间复杂度: O(N)

 2.2 优化

dp[i]表示最长子序列长度为i的最小尾数

//思路2:
//dp[i]表示最长上升子序列长度为i的最小尾数
//显而易见,dp是一个递增序列
//我们对每一个数进行遍历
//每一次找到值大于a的位置进行更新即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;   //最小尾数最大页只能为1e6
int dp[N];
int a[5010]; 
int main(void){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}dp[1]=a[1];  //初始化 int ans=1;for(int i=1;i<=n;i++){//找到dp中值第一个大于a[i]的位置int t=lower_bound(dp+1,dp+1+ans,a[i])-dp; dp[t]=a[i];ans=max(ans,t);}cout<<ans; return 0;
} 
  • 时间复杂度: O(nlog⁡n)
  • 空间复杂度: O(n)

lower_bound()函数是C++提供的二分查找的函数,具体使用方法可以看以下文章:

关于lower_bound( )和upper_bound( )的常见用法_lowerbound和upperbound-CSDN博客

代码自己写的,有什么问题欢迎指正。

都看到这里了,点个赞再走吧!!!(*^_^*)

http://www.lryc.cn/news/414363.html

相关文章:

  • 【Python系列】Python 协程:并发编程的新篇章
  • 详解C/C++输入输出
  • AI人工智能开发环境配置
  • Tomcat 8.5 下载、安装、启动及各种问题
  • Harbor系列之5:复制管理
  • V.PS德国VPS详细测评
  • 【Vue3】组件通信之自定义事件
  • [CTF]-PWN:ORW题型综合解析
  • VSCode中yarn的安装和使用
  • Java后端面试复习7.23
  • Arduino PID库 (2) –微分导致的过冲
  • 基于强化学习算法玩CartPole游戏
  • uniapp0基础编写安卓原生插件和调用第三方jar包(Ch34的jar包)和如何解决android 如何Application初始化
  • 使用Leaflet进行船舶航行警告区域绘制实战
  • 用Ollama 和 Open WebUI本地部署Llama 3.1 8B
  • 计算机毕业设计选题推荐-学生作业管理系统-Java/Python项目实战
  • RIP实验
  • 手把手教你如何在宝塔上添加可道云登录页面的ICP备案信息,别跟权威开玩笑。
  • 基于JSP技术的大学生校园兼职系统
  • VSCode在windows系统下的配置简单版
  • C++初学(9)
  • ardupilot开发 --- 网络技术综述 篇
  • 一文详解大模型蒸馏工具TextBrewer
  • Go语言加Vue3零基础入门全栈班10 Go语言+gRPC用户微服务项目实战 2024年07月31日 课程笔记
  • ChatGPT能代替网络作家吗?
  • Http自定义Header导致的跨域问题
  • python 中 file.read(), file.readline()和file.readlines()区别和用法
  • python 学习: np.pad
  • 等保2.0 | 人大金仓数据库测评
  • AIGC赋能智慧农业:用AI技术绘就作物生长新蓝图