LeetCode 300. 最长递增子序列

news/2024/11/19 20:35:51/

🌈🌈😄😄

欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 300. 最长递增子序列,做好准备了么,那么开始吧。

🌲🌲🐴🐴

一、题目名称

LeetCode 300. 最长递增子序列

二、题目要求

给你一个整数数组 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 <= nums.length <= 2500
  • -104 <= nums[i] <= 104

五、解决办法

动态规划

创建一个数组dp,初始化为1。使用两重循环,第一重循环遍历nums数组,当作右指针,第二重循环遍历之前的数,当作左指针,判断当前数是否大于之前的数。如果是,更新dp[j]的值为dp[i]+1。

这里要注意dp数组中当前所求值要取前面遍历过的最大值,比如

int nums[]={0,1,0,3,2,3};

在dp索引到达3时,前方要取0->1->3而不是单纯的更新dp[j]的值为dp[i]+1,所以代码为 

dp[j] =  Math.max(dp[i] + 1,dp[j]);

更新maxans的值为dp[j]的最大值。最后返回maxans。

六、代码实现

class Solution {public static int lengthOfLIS(int[] nums) {if (nums.length == 0) {return 0;}int[] dp = new int[nums.length];dp[0] = 1;int maxans = 1;for (int j = 1; j < nums.length; j++) {dp[j] = 1;for (int i = 0; i < j; i++) {if (nums[i] < nums[j]) {dp[j] =  Math.max(dp[i] + 1,dp[j]);}}maxans = Math.max(maxans, dp[j]);}return maxans;}
}

复杂度分析

时间复杂度:O(n^2) ,其中 n 为数组 nums 的长度。动态规划的状态数为 n,计算状态 dp[i] 时,需要O(n) 的时间遍历 dp[0…i−1] 的所有状态,所以总时间复杂度为 O(n 2)。

空间复杂度:O(n),需要额外使用长度为 n 的 dp 数组。

 

 


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

相关文章

已解决Python读取20GB超大文件内存溢出报错MemoryError

已解决Python读取20GB超大文件内存溢出报错MemoryError 文章目录报错问题报错翻译报错原因解决方法1解决方法2&#xff08;推荐使用&#xff09;帮忙解决报错问题 日常数据分析工作中&#xff0c;难免碰到数据量特别大的情况&#xff0c;动不动就2、3千万行&#xff0c;如果…

Kruskal重构树学习笔记(C++)

Kruskal重构树学习笔记 提示&#xff1a; 学习Kruskal重构树之前建议先了解一下Kruskal算法&#xff0c;虽然不了解这个影响不会很大 但一定要了解一下并查集的算法 接下来如果想要应用Kruskal重构树&#xff0c;一定要了解一下LCA算法 什么是Kruskal重构树 这里先简单说…

Linux进程间通信

文章目录进程间通信介绍进程间通信的概念进程间通信的目的进程间通信的本质进程间通信的分类管道什么是管道匿名管道匿名管道的原理pipe函数匿名管道使用步骤管道读写规则管道的特点管道的四种特殊情况管道的大小命名管道命名管道的原理使用命令创建命名管道创建一个命名管道命…

第一个python程序

我们将看一下如何用Python编写运行一个传统的“Hello World”程序。通过它,你将学会如何编写、保存和运行Python程序。 有两种使用Python运行你的程序的方式——使用交互式的带提示符的解释器或使用源文件。 1.使用带提示符的解释器 在命令行的shell提示符下键入python,启动解释…

【Android笔记67】Android之使用系统中的相机功能(拍照、保存照片、显示拍摄的照片、照片保存到图库等操作)

这篇文章,主要介绍Android如何使用系统中的相机功能(拍照、保存照片、显示拍摄的照片、照片保存到图库等操作)。 目录 一、使用Android相机功能 1.1、如何调用相机功能 1.2、调用相机功能

Wav2Vec HuBert 自监督语音识别模型

文章目录Wav2Vec: Unsupervised pre-training for speech recognitionabstractmethodwav2vec 2.0: A Framework for Self-Supervised Learning of Speech RepresentationsabstractintroductionmethodMODEL arch损失函数finetuneexprimentHuBERT: Self-Supervised Speech Repres…

第三章 熟悉的气息

Died有些奇怪&#xff0c;这个游戏好像有哪里不对劲&#xff0c;对&#xff0c;比她输入的代码要多了很多。她的游戏……只是很简单的啊。 Died的虚拟世界里…… 一个人&#xff0c;看不清面容&#xff0c;笑着&#xff1a;“Died的数据传回来了吗&#xff1f;” Died准备休息一…

孤儿进程和僵尸进程

文章目录孤儿进程僵尸进程孤儿进程 定义 父进程运行结束&#xff0c;但子进程还在运行&#xff08;未运行结束&#xff09;&#xff0c;这样的子进程就称为孤儿进程&#xff08;Orphan Process&#xff09;每当出现一个孤儿进程的时候&#xff0c;内核就把孤儿进程的父进程设置…