欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > leetcode300:最长递增子序列

leetcode300:最长递增子序列

2024/10/23 23:31:53 来源:https://blog.csdn.net/Oxford1151/article/details/140343711  浏览:    关键词:leetcode300:最长递增子序列

给你一个整数数组 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[i]表示当前数字前可以有多少递增序列(包含本身)

           如果符合前边的数小于当前数,可以考虑所有小于当前数的dp[j]+1与dp[i]比较

          dp[i]= max(dp[j]+1,dp[i]) , 0<=j<i 在num[j]<num[i]的条件下

          最后选最大的dp[i]

代码:

class Solution(object):def lengthOfLIS(self, nums):""":type nums: List[int]:rtype: int"""        if not nums:return 0dp = [1] * len(nums)for i in range(len(nums)):for j in range(i):if nums[j] < nums[i]:# 条件 前边的数比现在的数小,就可以实现序列的输出dp[i]=max(dp[j]+1, dp[i]) # 每次根据前边的序列的增长情况进行判断,如果j处的dp+1大于i处的dp那么就选大的return max(dp)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com