Python 在数组中查找递增和递减子序列

Python 在数组中查找递增和递减子序列,python,subsequence,Python,Subsequence,我有一个复杂的问题 我有这个数组[34,33,5,78,50,76,82,95119,31,49,76],我需要找到所有最长的递增和递减子序列。 例如,可以找到的最长递减子序列的长度为3。然后,我需要找到具有该长度的所有子序列,例如:[78,76,76]或[78,50,31]或[34,33,31]等等 我一直在尝试用python创建一个算法,在输入中给定一个数组,它会返回所有最长的递减和递增子序列,有一段时间,但我没有成功。 到目前为止我已经写过了 def find_decreasing(seq

我有一个复杂的问题

我有这个数组[34,33,5,78,50,76,82,95119,31,49,76],我需要找到所有最长的递增和递减子序列。 例如,可以找到的最长递减子序列的长度为3。然后,我需要找到具有该长度的所有子序列,例如:[78,76,76]或[78,50,31]或[34,33,31]等等

我一直在尝试用python创建一个算法,在输入中给定一个数组,它会返回所有最长的递减和递增子序列,有一段时间,但我没有成功。 到目前为止我已经写过了

def find_decreasing(seq):
found=[]
for v in seq[:-1]:        
    for iv in found[:]:
        if v > iv[0]:
            found.append([v+1]+iv)
    found.append([v])
return found
但它不起作用 你能帮我吗


谢谢你的关注。

如果我正确理解了你的问题,我曾经做过类似的事情

我的代码在一个数字列表中查找所有可能的递减数字

我将尝试解释它(仅针对递减序列):

我的做法是:

def find_decreasing(seq):
    found=[]
    for v in seq[::-1]:        
        for iv in found[:]:
            if v >= iv[0]:
                found.append([v]+iv)
        found.append([v])
    return found
现在解释逻辑并不容易,但理解代码并不难。如果你有任何疑问,你可以问我,我可以在以后更多时间发布解释

但使用此功能,可以轻松筛选出最大的:

decreasing = find_decreasing(seq) # Find all decreasing
max_len = max(map(len,decreasing)) # get the max length of that sequences
final_list = list(filter(lambda a: len(a)==max_len, decreasing)) # filter the ones with the max length
对于您的输入,我得到的答案是:

final_list = [[78, 76, 76],
 [78, 76, 49],
 [78, 76, 31],
 [78, 50, 49],
 [78, 50, 31],
 [34, 33, 31],
 [34, 33, 5]]

对于增加序列,很容易更改代码(只是将>=更改为您尝试了什么吗?您能发布您迄今为止最好的代码吗?这样我们可以帮助您理解为什么它不工作,并可能修复它。。。