题解 | #最长上升子序列(一)#

最长上升子序列(一)

http://www.nowcoder.com/practice/5f65ccbb025240bd8458eb6479c2612e

采用动态规划的方式求解

求解最长上升子列的问题,可以转化为求解输入的序列num中,分别以每一个元素作为结尾的序列的最长子列的问题。第i个元素的子列最长长度,等于满足nums[j] < nums[i]的子列的最长长度+1。

具体求解步骤如下:

  1. 取列表dp,长度等于输入的序列长度n。dp[i]代表以num[i]结尾的序列的最长长度,初始化为1。
  2. 递归关系式:dp[i]就等于满足nums[j] < nums[i] & 0<= j< i条件的dp[j]+1与dp[i]取最大值。
  3. 通过两层循环使得i遍历range(1, n), j遍历range(0, i)更新所有的dp值。
def lengthOfLIS(n, nums):
        if not nums:
            return 0
        dp = [1 for _ in range(n)]
        for i in range(1, n):
            for j in range(i):
                if nums[j] < nums[i]:
                    dp[i] = max(dp[i], dp[j] + 1)
        return max(dp)

n = int(input()) # 输入数组长度
s = input().split(" ") # 输入代表数组的字符串
nums = [int(s[i]) for i in range(len(s))]
print(lengthOfLIS(n, nums))
全部评论

相关推荐

不愿透露姓名的神秘牛友
09-11 13:00
投递长江存储等公司10个岗位
点赞 评论 收藏
分享
07-20 12:08
已编辑
江南大学 图像识别
机械牛马勇闯秋招:把校园经历里面做过的项目,大作业,课设,毕设啥的,扩写,写成具体的项目经历,自我评价缩写别占篇幅,不然这简历真没东西,初筛都过不了
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务