查找数组中最长的升序序列(Python)

查找数组中最长的升序序列(Python),python,arrays,list,sequence,Python,Arrays,List,Sequence,比如说,你会得到一个数字数组 nums = [2, 5, 3, 3, 4, 6] 并且想要得到尽可能长的数字序列,这些数字是递增的,虽然不一定是顺次的,同时保持顺序 最长的数字数组,其中An

比如说,你会得到一个数字数组

nums = [2, 5, 3, 3, 4, 6]
并且想要得到尽可能长的数字序列,这些数字是递增的,虽然不一定是顺次的,同时保持顺序

最长的数字数组,其中An
[2, 3, 4, 6]
我通过递归和循环实现了这一点,测试了每一种可能性。但是,对于较大的阵列和 所以我的问题是,是否有更好/更快的方法来做到这一点

提前谢谢

这是我以前的代码,它返回了最终数组的长度

def bestLine(arr):
    maximum = 0
    for i in range(0, len(arr)):
        if (len(arr)-i < maximum):
            break
        maximum = max(maximum, f(i, len(arr), arr))
    return maximum

def f(start, end, arr):
    best = 0
    for i in range(start+1, end):
        if (end-i < best):
            break
        if (arr[i] > arr[start]):
            best = max(best, f(i, end, arr))
    return 1 + best
def最佳线路(arr):
最大值=0
对于范围(0,len(arr))内的i:
如果(len(arr)-i<最大值):
打破
最大值=最大值(最大值,f(i,len(arr),arr))
返回最大值
def f(开始、结束、arr):
最佳值=0
对于范围内的i(开始+1,结束):
如果(i端<最佳值):
打破
如果(arr[i]>arr[start]):
最佳=最大值(最佳,f(i,结束,arr))
返回1+最佳值
我的解决方案:

def best_sequence_length(arr):
    '''Find length of the longest ascending sequence in an array'''
    arr_length = len(arr)
    if arr_length <= 1:
        return arr_length
    longest = [1] # will store the lengths of the longest sequence ending on this index
    best_idx_at_all = 0
    for idx in range(1, arr_length):
        best_len_so_far = 1
        back = -1
        for i in range(len(longest)+1):
            if arr[i] < arr[idx] and best_len_so_far <= longest[i]:
                best_len_so_far = longest[i] + 1
                back = i
        longest.append(longest[back]+1 if back > -1 else 1)
        if longest[best_idx_at_all] < longest[idx]:
            best_idx_at_all = idx
    return longest[best_idx_at_all]
def最佳序列长度(arr):
''查找数组中最长升序序列的长度''
arr_长度=长度(arr)

如果arr_length这里是您需要的搜索关键字:如果您使用递归进行了此操作,则可能值得发布此消息。[3,4,6]
,因为n&n+1必须是序列(邻居),不能跳过<代码>[2,3,4,6]是Axdef best_sequence(arr): '''Find longest ascending sequence in an array''' arr_length = len(arr) if arr_length <= 1: return arr longest = [1] # will store the length of the longest sequence ending on this index back_link = [-1] # link to the previous element in the longest sequence or -1 best_idx_at_all = 0 for idx in range(1, arr_length): best_len_so_far = 1 back = -1 for i in range(len(longest)+1): if arr[i] < arr[idx] and best_len_so_far <= longest[i]: best_len_so_far = longest[i] + 1 back = i back_link.append(back) longest.append(longest[back]+1 if back > -1 else 1) if longest[best_idx_at_all] < longest[idx]: best_idx_at_all = idx nxt = best_idx_at_all result = [] while nxt >= 0: result.append(arr[nxt]) nxt = back_link[nxt] return list(reversed(result))