最长上升子序列 LIS

news/2025/3/16 15:23:27/文章来源:https://www.cnblogs.com/SIPnnnnn/p/18775039
 1 /*
 2     给定一个无序的整数数组,找到其中最长上升子序列的长度。
 3     子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。
 4     例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的一个子序列。
 5 
 6     
 7 */
 8 
 9 #include <iostream>
10 #include <vector>
11 #include <algorithm>
12 using namespace std;
13 
14 int lengthOfLIS(vector<int>& nums) {
15     if (nums.empty()) return 0;
16     int n = nums.size();
17     vector<int> dp(n, 1);
18     int ans = 1;
19     for (int i = 1; i < n; ++i) {
20         for (int j = 0; j < i; ++j) {
21             if (nums[j] < nums[i]) {
22                 /*
23                      如果条件满足,说明又找到一个可以增加长度的数字nums[j],那么原有dp[j]会再增加一个长度,
24                      但nums[i]和比num[j]前面的数字num[0]~num[j-1]进行比较时,如果也有条件满足的数字,
25                      dp[i]也会加长度的,所以dp[i]里面也是有长度记载的,此时需要比较当次再增加一个长度
26                      的 dp[j] + 1 和 dp[i] 哪个大才是目前最大的长度
27                 */
28                 dp[i] = max(dp[i], dp[j] + 1);    
29             }
30         }
31         ans = max(ans, dp[i]);
32     }
33     return ans;
34 }
35 
36 int main() {
37     vector<int> nums = {10, 9, 2, 5, 3, 7, 101, 18};
38     cout << "最长上升子序列的长度为: " << lengthOfLIS(nums) << endl;
39     return 0;
40 }
41 
42 
43 
44 /*
45     思路
46     定义 dp[i] 表示以第 i 个元素结尾的最长上升子序列的长度。
47     状态转移方程为:dp[i] = max(dp[j]) + 1,其中 0 <= j < i 且 nums[j] < nums[i]。
48 */

 

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

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

相关文章

FastAPI依赖注入:参数共享与逻辑复用

扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长第一章:依赖注入核心原理 1.1 依赖树构建机制 from fastapi import Dependsdef auth_service():return OAuth2Scheme()def db_conn(auth: dict = Depends(auth_service)):return Database(creds=auth)@app.get(&q…

洛谷-P1449 后缀表达式

重操旧业~ 本菜鸡看到题就只会想到数组,但后来发现不可行,出去俩元素,还得进来一个元素,不好调o(╥﹏╥)o emm...但还是有所收获的,2转2,利用2-0,而不是直接强制int转换哦 同时也发现被题中举的例子迷惑了,数字可不一定是个位数! 1、此题采用栈和二叉树的后序遍历思想(…

DQL(查询语句)

简单查询 查询一个字段 select 字段名 from 表名; 查询多个字段 select 字段名1,字段名2,...,字段名 from 表名; 查询全部字段 ①在查询多个字段中,将所有的字段名写入 ②select * from 表名;————效率低,可读性差,因为将星号转化为所有字段名需要耗费一定时间,所…

PTA

​ 题目描述 小轿车中有一个系统随时监测四个车轮的胎压,如果四轮胎压不是很平衡,则可能对行车造成严重的影响。让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序,随时监测四轮的胎压,并给出正确的报警信息。…

第二章

TempStr = input("请输入带有符号的温度值:") if isinstance(TempStr, str) and TempStr[-1] in [F, f]:C = int((float(TempStr[0:-1]) - 32) / 1.8)print(f"转换后的温度是{C}C") elif isinstance(TempStr, str) and TempStr[-1] in [C, c]:F = int(1.8…

window11家庭版 WSL上安装CentOS7

环境 Windows11家庭版 1. 安装WSL配置 1.1 Win命令模式开启虚拟化步骤点击查看代码 # 启用适用于 Linux 的 Windows 子系统:打开powershell并输入: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart# 启用虚拟化:以管理员打…

探秘Transformer系列之(14)--- 残差网络和归一化

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer系列之(14)--- 残差网络和归一化 目录探秘Transformer系列之(14)--- 残差…

省选联考2024游记

搬运自 洛谷博客 ,文章写于 2024.03.05“总有地上的生灵,敢于直面雷霆的威光。”全文共1169字。 Day -105 2023/11/18 noip考完人就崩了,第二题甚至都没写出正解,只有压线省一,大哭。 也基本注定这回是进不了省队了。 Day -5 2024/2/26 周一 开始停课 Day -4 2024/2/27 周…

day30 正则三剑客---awk

awk是什么 再谈三剑客grep,擅长单纯的查找或匹配文本内容 sed,更适合编辑、处理匹配到的文本内容 awk,更适合格式化文本内容,对文本进行复杂处理后、更友好的显示三个命令称之为Linux的三剑客 awk学完后的能力 以下部分内容需要结合shell编程对文本行数据提取数据字段 模式…

树上查分学习笔记+做题记录

树上查分 点的查分求路径 \(u-v\) 上的点被经过的次数. \(cnt[x]\) 表示点 \(x\) 被经过的次数. 核心代码:cnt[u]++; cnt[v]++; cnt[lca(u,v)]--; cnt[father[lca(u,v)]]--;A. 运输压力解法 树上查分板子题啊 #include <bits/stdc++.h> using namespace std; const int N…

ActAgent开发之基于http请求引用链路模版发起对话

下载deepeek 首先本地安装ollama,这是一款支持mac,windows和linus系统的大模型管理工具。下载好后打开终端,执行命令ollama pull deepseek-r1:7b,可以在网上找想要下载的开源大模型,我这里下载的是deepseek-r1的7b模型。执行完后可以用ollama list查看是否下载成功,然后可…

缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)

说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的redis一致性面试题,类似如下:如何保障 MySQL 和 Redis 的数据一致性? 如何保障 MySQL 和 Cache 的数据一…