查找序列的最长递增子序列
什么是序列的最长递增子序列?
答:在一个数值序列中,找到一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能地大。这就是所谓的最长递增子序列
from itertools import combinations
from random import sampledef subAscendingList(arr):'''返回最长递增子序列'''for length in range(len(arr), 0, -1):#按长度递减的顺序进行查找和判断for sub in combinations(arr, length):#判断当前选择的子序列是否为递增顺序;长度为arr列表的长度递减,从arr列表中找,然后进行排列组合if list(sub) == sorted(sub):#找到第一个就返回;将得到的sub进行升序排序,若与原来的列表相等,即为递增的列表最大长度return sub
'''
Python itertools模块combinations(iterable, r)方法可以创建一个迭代器,
返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序。
'''arr=[]
n=int(input("请输入给定序列的个数:"))
print("请依次输入给定序列的值:")
for i in range(n):arr.append(int(input()))
print("最大递增子序列为:")
print(subAscendingList(arr))
效果图如下: