首页 > 其他分享 >LeetCode 300_最长递增子序列

LeetCode 300_最长递增子序列

时间:2023-01-15 15:35:26浏览次数:35  
标签:nums 300 递增 最长 int 序列 maxlen LeetCode dp

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

思路

求最长子序列,使用动态规划,dp[i]表示i之前包括i的最长上升子序列的长度,可以根据dp[j] (j < i)推导出来,位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值。

代码

class Solution {
    public int lengthOfLIS(int[] nums) {
        int maxlen=1;
        int []dp=new int [nums.length+1];
        Arrays.fill(dp, 1);//每个位置初始化为1
        for(int i=1;i<nums.length;i++)
        {
            for(int j=0;j<i;j++)//对于每个小于i的元素都进行比较
            {
                if(nums[i]>nums[j])
                dp[i]=Math.max(dp[i],dp[j]+1);//不是要dp[i] 与 dp[j] + 1进行比较,而是要取dp[j] + 1的最大值。
            }
            if(dp[i]>maxlen)
                maxlen=dp[i];
        }
        return maxlen;
    }
}

反思

①dp数组初始化需要仔细思考

标签:nums,300,递增,最长,int,序列,maxlen,LeetCode,dp
From: https://www.cnblogs.com/Janecodehouse/p/17053563.html

相关文章

  • 【BFS】LeetCode 542. 01 矩阵
    题目链接542.01矩阵思路题目让求1到0的距离,其实可以转换成求0到1的距离,将所有的0作为源结点放入队列进行BFS。BFS本质上就是从源点开始的搜索算法,本题只不过是所有的......
  • 【BFS】LeetCode 1091. 二进制矩阵中的最短路径
    题目链接1091.二进制矩阵中的最短路径思路BFS找最短路模板题代码classSolution{publicintshortestPathBinaryMatrix(int[][]grid){if(grid[0][......
  • LeetCode刷题:runtime error: reference binding to null pointer of type 'int' (stl_
    题目:https://leetcode.cn/problems/merge-intervals/错误代码://思路初探:做了很多道类似区间操作的题目了。本题就是尽可能少的创建新区间//1.首先对区间排序(左边界升......
  • LeetCode寻找两个正序数组的中位数(vector/二分查找 划分数组)
    原题解题目给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。约束......
  • Leetcode——双向链表和哈希表实现LRU缓存和LFU缓存
    一、Leetcode146.LRU缓存1.使用STLlist和unordered_map实现usingKV=pair<int,int>;classLRUCache{private:intcacheCapacity;list<KV>cacheList;......
  • LeetCode.19 删除链表的倒数第n个元素
    1.题目给你一个链表,删除链表的倒数第 ​​n​​ 个结点,并且返回链表的头结点。 2.代码/***Definitionforsingly-linkedlist.*publicclassListNode{*int......
  • LeetCode 142_环形链表 II
    LeetCode142:环形链表II题目给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指......
  • leetcode 笔记
    1.移位运算符>>&>>=和|=属于位运算符,作用是对二进制数进行移位操作<<左移:末尾补0,原数乘2比如十进制数10,在末位补0等于100,相当于原数乘10,所以x<<1就是......
  • LeetCode.24 两两交换链表中的结点
    1.题目给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 2.代码/***Definitionforsin......
  • leetcode 每日一题 gcd+枚举
    1819.序列中不同最大公约数的数目给你一个由正整数组成的数组nums。数字序列的最大公约数定义为序列中所有整数的共有约数中的最大整数。  例如,序列[4,6,16]......