0
点赞
收藏
分享

微信扫一扫

【leetcode】300.最长递增子序列

【leetcode】300.最长递增子序列


在这里插入图片描述

题目

leetcode原题链接

思路

  • dp[i]表示以i这个位置数字为结尾的最长升序子序列的长度
  • dp[i]dp[j] (0 <= j < i)的关系:对于每一个dp[j]if(nums[i] > nums[j]) dp[i] = Math.max(dp[i] , dp[j] + 1)
  • 初始化,对于每一个i,dp[i]至少等于1(即最长升序子序列),故每一项初始化为1
  • 由于dp[i]依赖于前面的每一项,故从前向后遍历
  • 返回dp数组中的最大值,而不是最后一项

代码

在这里插入图片描述

/**
 * @param {number[]} nums
 * @return {number}
 */
var lengthOfLIS = function(nums) {
    let len = nums.length
    let dp = new Array(len).fill(1)
    let res = 1
	
    for(let i = 1 ; i < len ; i++){
        for(let j = 0 ; j < i ; j++){
            if(nums[i] > nums[j]){
                dp[i] = Math.max(dp[i] , dp[j] + 1)
            }
        }
        res = Math.max(res , dp[i])
    }
    return res

};

复杂度

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( n ) O(n) O(n)

关注我的专栏,每天更新三道leetcode题解,一起变强!

举报

相关推荐

0 条评论