这道题也可以看作“动态规划问题”,建议先看视频(10mins)https://www.bilibili.com/video/BV1AB4y1w7eT (感谢博主如此清晰的解析和制作视频的良苦用心,辛苦了,十分感谢)

举例:数组[1, 5, 2, 4, 3],求升序排列的子数组最大长度 题解:对于数组中的每一位,都是在求后N位的数组中的最长子序列,如下图所示, alt 因此我们创建一个全为1的n列数组,本题为【1,1,1,1,1】 创建双层循环,外层遍历n位数字倒序,内层遍历第n位后的子数组,判断子数组中的数字是否大于当前数字,如果有大于当前数字的数字,则说明还有递增的可能性,因此求L[j]的最大值+1;如果没有比当前数字大的数,说明从当前位出发,没有再递增的可能性,所以L[i]=1,保持不变。 将上述逻辑整理为代码如下:

while True: try: n = int(input()) s = [int(x) for x in input().split()] L = [1]* n

    for i in reversed(range(n)):
        for j in range(i+1, n):
            if s[j] > s[i]:
                L[i] = max(L[i], L[j] + 1)
    
    max_len = max(L)
    print(max_len)
    
    
    
except:
    break