栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python动态规划——最大递增序列

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python动态规划——最大递增序列

问题:

最长上升子序列(LIS)问题:
  给定长度为n的序列a,从a中抽取出一个子序列,
  这个子序列需要单调递增。
  问最长的上升子序列(LIS)的长度。
  e.g. 1,5,3,4,6,9,7,8的LIS为1,3,4,6,7,8,长度为6。
def func(l):
  '''
  type: l: list
  rtype: result: int
  '''

  #第一步创建保存右边比左边大的初始值,每个值的初始值都为1
  dp = [1]*len(l)

  for i in range(len(l)):
    for j in range(i):
      if l[i] > l[j]:
        #相当于选择排序,轮到该值的时候和前面的值进行依次比较,如果比前值大,dp列表中就在前值的基础上加1
        dp[i] = dp[j]+1

  print(max(dp))

问题2:

连续最长上升子序列(LIS)问题:
  给定长度为n的序列a,从a中抽取出一个子序列,这个子序列需要单调递增。
  问最长的连续上升子序列(LIS)的长度。
  e.g. 1,5,3,4,6,9,7,8的LIS为3,4,6,9,长度为4。
def func2(l):
  '''
  type: l: list
  rtype: result: int
  '''

  #第一步创建保存右边比左边大的初始值,每个值的初始值都为1
  dp = [1]*len(l)

  for i in range(1,len(l)):
    if l[i] > l[i-1]:
      dp[i] = dp[i-1]+1
  
  print(max(dp))

执行主程序:

if __name__ == '__main__':

  l = [1,5,3,4,6,9,7,8]
  func(l)
  func2(l)

运行结果:

6
4
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302384.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号