题解 | #Redraiment的走法#

Redraiment的走法

http://www.nowcoder.com/practice/24e6243b9f0446b081b1d6d32f2aa3aa

这道题也可以看作“动态规划问题”,建议先看视频(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
全部评论
牛,大神
点赞 回复 分享
发布于 2022-08-31 10:01 广东
为什么是n位数字倒序?
点赞 回复 分享
发布于 2023-07-15 09:09 广东
正序遍历亦可,外层i范围range(n)、内层j范围range(i)、判断条件s[i]>s[j]
点赞 回复 分享
发布于 09-19 17:16 广东

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
我即大橘:耐泡王
点赞 评论 收藏
分享
44 13 评论
分享
牛客网
牛客企业服务