最长上升子序列
求一个序列的最长上升子序列长度可以通过动态规划求解。动态规划的思想是将一个问题分成多个阶段,每一阶段的解依靠其之前阶段的解推出。按照动态规划的思想,在求解序列[2, 5, 1, 5, 4, 5]的最长上升子序列时,可以将问题分解为:
以2为结尾的序列[2]的最长上升子序列长度,
以5为结尾的序列[2, 5]的最长上升子序列长度,
以1为结尾的序列[2, 5, 1]的最长上升子序列长度
... ...
求解代码如下
def sub_array(array):
sub = len(array)*[1]
for i in range(len(array)):
for j in range(i):
if array[i]>array[j]:
sub[i] = max(sub[i],sub[j]+1)
return max(sub)
运行代码
>>> sub_array([2, 5, 1, 5, 4, 5])
3
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步