首页 > 其他分享 >Leetcode 300. 最长递增子序列

Leetcode 300. 最长递增子序列

时间:2024-06-07 16:57:53浏览次数:19  
标签:nums 300 递增 示例 int 序列 Leetcode dp

https://leetcode.cn/problems/longest-increasing-subsequence/description/

给你一个整数数组 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

进阶:
你能将算法的时间复杂度降低到 O(n log(n)) 吗?

解答
dp解答
dp[x]为 索引x的数字结尾能到达的最长严格递增子序列的长度
所以 y是小于x的索引 如果nums[x] >nums[y],说明nums[x]可以加在以nums[y]结尾的严格递增子序列后面,
那么长度就是dp[x]=dp[y]+1;

代码如下

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int dp[3000]; int ans=1;
        for(int i= 0;i<nums.size();i++){
            dp[i]= 1;
            for(int j=0;j<i;j++){
                if(nums[j]<nums[i]){
                    dp[i]=max(dp[i],dp[j]+1);
                }
            }
            ans=max(ans,dp[i]);
        }

        return ans;
    }
};

时间复杂度是O(n^2)

标签:nums,300,递增,示例,int,序列,Leetcode,dp
From: https://www.cnblogs.com/itdef/p/18237487

相关文章

  • leetcode19删除链表的倒数第 N 个结点
    本文主要讲解删除链表倒数第n个节点的要点与细节c++与java代码如下,末尾本题之前可以尝试leetcode203移除链表元素具体要点:1.首先,单看移除链表节点,核心操作是:cur->next=cur->next->next 即,当前节点cur的下一个节点指向原本的下下个节点小细节:操作时,我们需要得到要......
  • leetcode160相交链表
    本文主要讲解相交链表的要点与细节c++及java代码如下,末尾1.两个链表相交的条件是,两个节点的指针相同,而不是元素值相同,即if(a==b)returna; 2.·既然要找到相交的点,那么相交之后,两个链表就完全一样了(后续长度和数值),那么我们就要不断同步更新headA和headB的临时指针,直到......
  • 代码随想录算法训练营 第三天 链表 Leetcode203 移除链表元素 Leetcode707 设计链表 L
    Leetcode203移除链表元素 题目链接注意为了使后续节点方式统一 要人为设置链表头节点链表的处理一定要明白如何找前置节点/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*L......
  • Q12 LeetCode904 水果成篮
    1.使用HashMap记录键值对2.定义HashMap方式HashMap<Integer,Integer>map=newHashMap<>();3.map.put(key,value);输入键值对4.map.getOrDefault(value,0);获取值,如果没有默认为0;5.map.get(key)取值6.map.size()键值对长度7.map.replace(key,value)替换key的value值 ......
  • AI全自动批量剪辑软件,一天剪辑3000条原创视频不是梦【剪辑软件+全套教程】
    创建一个AI全自动批量剪辑软件的简易程序涉及较为复杂的视频处理和机器学习技术,而且由于这是一个相当高级的任务,通常需要大量的代码以及深度学习框架支持。不过,我可以为您提供一个非常基础版本的程序示例,它会用Python的moviepy库批量剪辑一组视频,每个视频裁剪前10秒作为示例......
  • LeetCode第一题“两数之和”(梦开始的地方~)
    “有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。”“两年前第一次刷leetcode,第一题就不会。两年后的今天重刷第一题还是不会,我还是以前的我,不忘初心,没有一丝丝改变。”逛力扣的时候发现的,挺好玩的······然后看看LeetCode第一题难在哪里吧!题目:给定一个......
  • 【机器学习300问】108、什么是多项式回归模型?
    一、多项式回归是什么(1)举例说明        假设你经营着一家农场,想要根据土地面积来预测作物的产量。如果你只用线性模型(即),你可能会发现它并不足以描述实际的产量情况,因为实际产量可能会随着土地面积的增加而经历先快速增加然后趋于平缓的过程。线性回归模型......
  • Q9 LeetCode844 比较含退格的字符串
    1.使用StringBuffer替代String挨个字符进行操作StringBuffersb=newStringBuffer(str);2.sb.charAt(i)进行字符串循环3.sb.append(char)进行字符数组的组成4.sb.deleteAt(i)进行指定位置字符的删除5.若比较StringBuffer字符是否相等需要将其转换成String使用toString()方法......
  • 代码随想录算法训练营第29天 | 491.递增子序列 、46.全排列 、47.全排列 II
    491.递增子序列本题和大家刚做过的90.子集II非常像,但又很不一样,很容易掉坑里。https://programmercarl.com/0491.递增子序列.html视频讲解:https://www.bilibili.com/video/BV1EG4y1h78v关键点还要在于本层使用过的数字不能再使用/***@param{number[]}nums*@return......
  • (第26天)【leetcode题解】226、翻转二叉树 589、N叉树的前序遍历 590、N叉树的后序遍
    目录226、翻转二叉树题目描述思路代码589、N叉树的前序遍历题目描述思路代码590、N叉树的后序遍历题目描述思路代码思考总结226、翻转二叉树题目描述给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,......