LeetCode300. 最长递增子序列(2024冬季每日一题 30)

news/2024/12/15 7:38:34/

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的 子序列。

示例 1:

输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

示例 2:

输入:nums = [0,1,0,3,2,3]
输出:4

示例 3:

输入:nums = [7,7,7,7,7,7,7]
输出:1

提示:

1 < = n u m s . l e n g t h < = 2500 1 <= nums.length <= 2500 1<=nums.length<=2500
− 1 0 4 < = n u m s [ i ] < = 1 0 4 -10^4 <= nums[i] <= 10^4 104<=nums[i]<=104

进阶:

你能将算法的时间复杂度降低到 O( n l o g ( n ) n log(n) nlog(n)) 吗?


思路:动态规划

  • 维护一个递增序列,遍历完所有元素后,递增序列的长度就是最长递增子序列的长度
  • 遍历每个元素,找到维护的递增序列里面,比当前元素小的最右边一个元素,找到后,将当前元素插入到找到的元素的后面一个位置,确保序列是递增的,并且覆盖掉的元素大于等于当前元素/新增的位置
  • 每次更新递增序列的最大长度
  • 重复上面过程,返回递增序列的长度,即最长递增子序列的长度
class Solution {
public:int a[2510];int lengthOfLIS(vector<int>& nums) {a[0] = -2e9;int n = nums.size(), len = 0;for(int i = 0; i < n; i++){int l = 0, r = len;while(l < r){int mid = l + r + 1 >> 1;if(a[mid] >= nums[i]){r = mid - 1;}else{l = mid;}}a[l + 1] = nums[i];len = max(l + 1, len);}return len;}
};

http://www.ppmy.cn/news/1555238.html

相关文章

【汇编】思考汇编中的两个基本问题

1. 若干年前的疑问 几年前还在大学学习汇编时&#xff0c;不管是考试还是课程设计&#xff0c;其实都很顺利。但是心里一直对什么时候使用哪个寄存器存在疑惑&#xff0c;编写汇编时&#xff0c;没有十足的把握&#xff0c;都是抱着试一试的心态去完成了课程任务。 工作八年有…

ThinkPHP开发的原生微信小程序二手物品回收小程序管理系统源码

二手物品回收小程序 一款基于ThinkPHP开发的原生微信小程序二手物品回收小程序管理系统。支持线上下单、免费上门取件、评估价格等功能。提供全部无加密源码&#xff0c;支持私有化部署。

专题一:斐波那契数列模型算法

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是记忆化搜索&#xff0c;并且掌握记忆化搜索算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早…

vue中打包dist文件内assets 和 static 的区别

背景 在Vue.js项目中&#xff0c;assets 和 static 是两个用于存放静态资源的文件夹&#xff0c;但它们在使用方式和处理机制上有所不同 用途 assets: assets 文件夹通常用于存放那些需要在构建过程中被Webpack处理的静态资源。这些资源可以包括图片、字体、样式文件&#…

Python实现银杏树绘制与效果展示

银杏树&#xff0c;因其形态优美、叶片独特而被人们喜爱。银杏的叶子呈扇形&#xff0c;秋天时叶片呈现出金黄的色彩&#xff0c;成为秋季的代表之一。今天&#xff0c;我们将使用Python的turtle库来绘制一棵具有银杏树&#x1f342;特色的树。 通过编写Python代码&#xff0c;…

总结与提升

今天学习了ai&#xff0c;对今天学习的内容进行总结。 本文参考chat gpt-4的训练文献。 模型架构基础 Transformer 架构&#xff1a;ChatGPT 采用了 Transformer 架构&#xff0c;这是一种基于自注意力机制的深度学习模型架构。它能够并行计算文本中的长期依赖关系&#xff…

量化分析:股票的筹码分布和获利比例

筹码分布 筹码分布是股票分析里面的一个比较简单的部分&#xff0c;通过查看筹码的分布图形&#xff0c;判断当前的股票的压力的指数&#xff0c;通过查看获利的比例来计算有多少人愿意出&#xff0c;有多少人愿意保持价格 目前的很多工具也是可以直接去查看的&#xff0c;但…

02-51单片机的C语言基础与最小系统

C语言基础 一个简单的单片机C程序要有什么 #include<reg51.h> void main() {while(1){} }C语言中常用语句略&#xff0c;if,while,do…while,for,switch…case 函数略 C&#xff0d;51的数据类型扩充定义 sfr:特殊功能寄存器声明sfr 变量名地址值&#xff1b;*特殊功…