题解 | #合唱队#

合唱队

https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4

def find_max(inplis):
    temp_lis = [0]*num
    for i in range(num):
        for j in range(i):
            if inplis[i] > inplis[j]:
                temp_lis[i] = max(temp_lis[i],temp_lis[j]+1)
    return temp_lis

while True:
    try:
        num = int(input().strip())
        inpque = list(map(int, input().strip().split()))    #注意加split,不然是string,z正常解决是int(float())
        re_inpque = inpque[::-1]
        max_dp = 0

        left,right = find_max(inpque),find_max(re_inpque)[::-1]
        for i in range(len(inpque)):         
            if max_dp < (left[i] + right[i] + 1):
                max_dp = left[i] + right[i] + 1
            
        print(num - max_dp)
    
    except:
        break

关于运行时间:

之前一直过不了,第一次过自测是把while删除走白板……

看了评论区大佬,发现可以减少赋值?

之前是设置dp 的list再比较。这种方法就不用管while了而且平均快很多

全部评论

相关推荐

2025-12-02 19:33
辽宁科技大学 golang
Richard奇:还得是有鹅选鹅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务