最长上升子序列

动态规划--最长上升子序列问题(LIS) O(n^2) ,O(nlogn) LIS(Longest Increasing Subsequence)最长上升子序列 或者 最长不下降子序列。很基础的题目,有两种算法,复杂度分别为O(n*logn)和O(n^2) 。 ********************************************************************************* 先回顾经典的O(n^2)的动态规划算法: 设 阅读详情

一题目

给定一个无序的整数数组,找到其中最长上升子序列的长度。

示例:

输入: [10,9,2,5,3,7,101,18]
输出: 4 
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。

动态规划:

 /**
        dp[i]: 所有长度为i+1的递增子序列中, 最小的那个序列尾数.
        由定义知dp数组必然是一个递增数组, 可以用 maxL 来表示最长递增子序列的长度. 
        对数组进行迭代, 依次判断每个数num将其插入dp数组相应的位置:
        1. num > dp[maxL], 表示num比所有已知递增序列的尾数都大, 将num添加入dp
           数组尾部, 并将最长递增序列长度maxL加1
        2. dp[i-1] < num <= dp[i], 只更新相应的dp[i]
        **/
def f(nums):
    if not nums:
        return 0
    dp = [nums[0]]
    print(dp)
    n = len(nums)
    for i in range(1, n):
        print('i:',i)
        if nums[i] > dp[-1]:
            dp.append(nums[i])
            print('if dp:',dp)
            continue
        for j in range(len(dp)):
            if nums[i] < dp[j]:
                dp[j] = nums[i]
                print('for if:',dp)
                break
            # else:
            #     nums[i] == dp[j]  # 避免相等的数重复入组
            #     print(nums)
    return len(set(dp))
nums=[10,9,2,5,3,7,101,18]
f1=f(nums)
print(f1)

 贪心算法

def f(nums):
    size = len(nums)
    if size <= 1:
        return size
    dp = [1] * size
    for i in range(1, size):
        for j in range(i):
            if nums[i] > nums[j]:
                # + 1 的位置不要加错了
                dp[i] = max(dp[i], dp[j] + 1)
# 最后要全部走一遍,看最大值
    return max(dp)
nums=[10,9,2,5,3,7,101,18]
f1=f(nums)
print(f1)

 

最长上升子序列 (LIS) 详解+例题模板 (全) 欢迎访问https://blog.csdn.net/lxt_Lucia~~ 宇宙第一小仙女\(^o^)/~~萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗~~ ------------------------------------我只是一条可爱哒分界线-------------------------------------- 1.摘要: 关... 阅读详情

相关推荐

C语言——最长上升子序列

最长上升子序列 最长上升子序列 一个数的序列 bi,当 b1<b2<...<bS 的时候,我们称这个序列是上升的。对于给定的一个 序列(a1,a2,...,aN), 我们可以得到一些上升的子序列(ai1,ai2,...,aiK),这里 1<=i1<i2<...<iK <=N。比如,对于序列(1,7,3,5,9,4,8),有它的一些 上升子序列,如(1...

qq_43499793的博客 5933

最长非上升子序列

问题描述: 给定一个序列:X1 X2 X3 X4 X5 X6......Xn,试图找到一个最长的子序列,Xi1 Xi2 Xin,使得i1 举个例子:48 65 34 29 64 38 89 有一种非常简单的做法,能够非常简单的计算出所要序列的长度,但是无法给出序列。过程如下 48 65 65 34 65 34 29 65 64 29 65 64 38 89 64 38 因此

mzaort的专栏 687

最长上升子序列的长度

1) /** * 最大上升子序列的长度 * 给定一个无序的序列,求其最大上升子序列的最大长度 * 子序列要为上升并且长度最长 * 思路: * 序列一共k个点,{a1, a2, ..., ak} 以每个点为终点,这样就有k个状态,分别讨论它们的最长上升子序列,然后取最大的情况 * 维护一个一维数组maxLen[k],表示以序列元素{ak}为终点时的最长上升子序列 * 递推公式: *

内心毫无波动甚至还想笑的博客 708

数组数组-最长上升子序列

题目描述: 给定一个整型数组, 求这个数组的最长严格递增子序列的长度。 譬如序列1 2 2 4 3 的最长严格递增子序列为1,2,4或1,2,3.他们的长度为3。 输入: 输入可能包含多个测试案例。 对于每个测试案例,输入的第一行为一个整数n(1&lt;=n&lt;=100000):代表将要输入的序列长度 输入的第二行包括n个整数,代表这个数组中的数字。整...

我是传奇 413

YOLOv5添加注意力机制的具体步骤

本文主要介绍了 本文在此篇博客的基础上向YOLOv5-5.0版 本文主要包括以下内容一、CBAM注意力机制添加(1)修改yolov5s主干网络(2)在common.py中添加可调用的CBAM模块(3)向yolo.py文件添加CBAMC3判断语句二、SE注意力机制添加 本文以yolov5s网络为例 一、CBAM注意力机制添加 注意力机制可以添加在backbone,Neck,Head等部分,接下来本文以backbone主干网络为例 (1)修改yolov5s主干网络 1.在yolov5-5.0工程文件夹下,找到m

thy0000的博客 2万+

手把手教你用SlowFast训练自定义手势识别数据集(附FFmpeg抽帧技巧)

本文提供了一份基于SlowFast架构训练自定义手势识别数据集的完整实战指南。文章重点剖析了数据准备的核心挑战,详细讲解了利用FFmpeg进行高、低帧率抽帧的技巧,并介绍了构建半自动标注流水线、生成符合SlowFast要求的AVA格式数据集文件的具体方法。最后,针对手势识别场景,给出了关键的模型训练配置与调优建议,帮助开发者高效完成从数据到模型的全流程。

s1t2u3的博客 909

最长上升子序列(LIS)算法

LIS定义 LIS(Longest Increasing Subsequence)最长上升子序列  一个数的序列bi,当b1 &lt; b2 &lt; … &lt; bS的时候,我们称这个序列是上升的。 对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK), 这里1 &lt;= i1 &lt; i2 &lt; … &lt; iK ...

紫芝的博客 2万+

[面试]SoC验证工程师面试常见问题(三)

SoC 验证工程师面试中,SystemVerilog、UVM 和 SystemC 的代码题目通常涵盖面向对象编程、约束随机化、UVM 组件设计、内存建模等主题。通过练习上述示例题目和理解关键点,你可以更好地应对现场编码环节。如果有具体的面试方向(如特定协议验证)或公司偏好,可以提供更多信息,我会进一步定制题目和答案。祝你面试顺利!

元直的博客 1616

最长上升子序列(c++图文详解)

这题思路是这样,假设这个序列长度为n,存在数组a中,maxlen[i]表示以第i个数为终点的最长上升子序列的长度,它被初始化为1,因为一开始单个字符的最长上升子序列都是1(它自己),我们先用一个循环i遍历这个序列,i从2(序列的第2个字符)开始一直加1加到n,表示求以第i个数为终点的最长上升子序列的长度,然后同时在这个循环下再来一个循环j,j从1开始加1一直加到i-1为止,表示以第j个数为终点的最长上升子序列。只要出现a[i]>a[j]的情况,maxlen[i]=max(maxlen[i],max..

qq_53763705的博客 7637

STM32-CubeMx-HAL库-串口空闲中断+DMA——利用HAL_UARTEx_ReceiveToIdle_DMA实现不定长数据接收

STM32-CubeMx-HAL库-串口空闲中断+DMA——利用HAL_UARTEx_ReceiveToIdle_DMA实现不定长数据接收

weixin_43864631的博客 1万+

鸿蒙子系统解读-分布式软总线子系统初步研究(下)

鸿蒙子系统解读-分布式软总线子系统初步研究(下) 本文作者:江苏润和软件股份有限公司 郎建中 3.2. 数据传输 上一节我们看了PublishService()函数的代码实现过程。被发现端发布服务后,软总线回调发布成功的函数中,被发现端需要使用CreateSessionServer()来创建会话的服务器等待发现端的连接创建会话。下面我们就来分析CreateSessionServer()函数的实现过程。 数据传输部分的代码位于foundation/communication/services/softbus

weixin_47070198的博客 3088

Python最长上升子序列

最长上升子序列(百炼2757) 问题描述: 一个数的序列ai,当a1 < a2 < … < aS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8), 有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列

Hanger 2662

STM32 LwIP协议栈优化:从TCP延迟10ms降至1ms的内存配置手册

摘要: 本文针对STM32嵌入式开发中LwIP TCP通信的高延迟问题(默认配置下延迟达10~20ms),提出纯软件优化方案,通过调整内存配置与TCP参数将延迟降至1ms。核心问题包括内存池不足、pbuf分配低效及Nagle算法拖累,优化步骤包括: 内存池扩容:增大MEMP_NUM_TCP_PCB至10、PBUF_POOL_SIZE至32,避免资源竞争; pbuf静态池分配:采用2048字节大块缓冲区匹配DMA传输,减少分块与拷贝; 关闭Nagle算法:设置TCP_NODELAY=1,禁用延迟确认以加速小包

weixin_42212753的博客 1708

【洛谷 B3637】最长上升子序列 题解(动态规划+最长上升子序列)

这是一个简单的动规板子题。给出一个由nn≤5000个不超过106的正整数组成的序列。请输出这个序列的的长度。最长上升子序列是指,从原序列中取出一些数字排在一起,这些数字是的。

HEX9CF的技术博客 1852

基于AI的智能开发环境—Trae在Web开发中的应用实战与性能评估【Trae项目实战】

Trae 是一款与 AI 深度集成的开发工具,提供智能问答、代码自动补全和基于 Agent 的 AI 自动编程能力,极大提升开发效率。它具备完备的 IDE 功能,如代码编写、项目管理和源代码管理等,同时还具备强大的 AI 助手,能够提供智能问答、实时代码建议、代码片段生成等服务。开发者可以通过自然语言与 AI 协作,从 0 到 1 开发项目,AI 会根据需求自动生成代码或创建文件。

一键难忘的博客 3万+

CRMEB开源电商系统 /api/products SQL注入漏洞复现(CVE-2024-36837)

2024年6月,CRMEB开源电商系统发布了新补丁,修复了一处SQL注入漏洞(CVE-2024-36837)。经分析,该漏洞可以通过请求api的路径接口来进行SQL注入,进而可能导致敏感信息泄露,该注入可暴露后台web绝对路径,深入利用可获取服务器权限,该漏洞无前置条件且利用简单,建议受影响的用户尽快修复漏洞。

0xSec 2882

最长上升子序列模型

上升子序列

m0_72747430的博客 805

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

最长上升子序列的个数

先去重,去掉连续一段相同的数字,只保留一个,并且记录这个数字有多少个。设数组a[i]为去重后的数列,c[i]为a[i]对应的连续一段相同的数字的个数。 对a[i]做最长上升子序列,同时维护一个数组g[i],表示已a[i]为结尾的最长上升子序列的个数是多少,那么在计算f[i]的时候就要对g[i]处理一下(具体方法见代码)。 #include using namespace std; int

qust1508060414的博客 1599

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

最长上升子序列(nlogn)

思路:DP【i】表示长度为i+1的最长上升子序列结尾的最小值,初始化为inf,每次添加a【i】表示以a[i]为结尾的最长上升子序列。最后查询以inf结尾的下标就是最长上升子序列的长度。 #include <cstdio> #include <cstring> #include <algorithm> #include <set> #include<bits/stdc++.h> using namespace std; typedef long l.

Ray.C.L的博客 1127

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数组的最长上升子序列

给定一个无序的整数数组,找到其中最长上升子序列的长度, 注意,并没有连续的要求。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。 方法: https://leetcode-cn.com/problems/longest-increasing-subsequen...

Peace 923

DP之最长上升子序列

前言:我们先了解一下最长连续递增子序列的求解! #include<bits/stdc++.h> using namespace std; //求最长连续递增序列 #define maxn 100000 int n,a[maxn],dp[maxn];//dp[i]即前i个元素的上升子序列的长度 int main(){ cin>>n; for(int i=1;i&l...

柯微 438
上一篇: 深信服2019春招笔试---子串模糊匹配
下一篇: 数据库基础理论知识
one_zero_one
博客等级 码龄7年 30粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值