Python---查找序列的最长递增子序列

查找序列的最长递增子序列

什么是序列的最长递增子序列?
答:在一个数值序列中,找到一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能地大。这就是所谓的最长递增子序列

from itertools import combinations
from random import sample

def 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))

效果图如下:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章