0
点赞
收藏
分享

微信扫一扫

lintcode:397 · 最长上升连续子序列

河南妞 2022-05-01 阅读 53

题目来源

  • leetcode

题目描述

在这里插入图片描述

题目解析

暴力

要求找到最长的a[i]<a[i+1]<...+a[j]a[i] < a[i + 1] < ... + a[j],可以从每个a[i]a[i]开始,一直向后延伸找到最长的连续上升序列

时间复杂度O(N^2)

动态规划

(1)确定状态:

  • 对于最优的策略,一定有最后一个元素a[j]a[j]
    • 第一种情况:最优策略中最长连续上升子序列就是a[j]{a[j]},答案是1
    • 第二种情况:
      • 子序列长度大于1,那么最优策略中a[j]a[j]前一个元素肯定是a[j1]a[j - 1]。这种情况一定是a[j1]<a[j]a[j-1] < a[j]
      • 因为是最优策略,那么它选中的以a[j1]a[j - 1]结尾的连续上升子序列一定是最长的
  • 子问题:
    • 原问题:求a[j]a[j]结尾的最长连续上升子序列
    • 子问题:求a[j1]a[j-1]结尾的最长连续上升子序列
  • 状态:f[j]:以a[j]结尾的最长连续上升子序列的长度

(2)转移方程

在这里插入图片描述
(3)初始条件&&边界情况

  • 初始条件:空
  • 情况2必须满足:
    • j >0,即a[j]前面必须至少有一个元素
    • a[j] > a[j - 1],满足单调性

(4)计算顺序

  • f[0]、f[1]
  • 最终答案:最终答案不一定是是最后的字符结尾的,所以答案是max[f[0],f[1]…f[n - 1]]
  • 时间&&空间复杂度:Q[n]

在这里插入图片描述

举报

相关推荐

0 条评论