题解 | #合唱队#

合唱队

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

import bisect

def find(l):
    tail,cl = [],[]
    cnt = 0
    for i in l:
        index = bisect.bisect_left(tail,i)
        if index==len(tail):
            tail.append(i)
            cnt += 1
            cl.append(cnt)
        else:
            tail[index]=i
            cl.append(cnt)
    return cl


n = int(input())
sl = list(map(int,input().split()))
print(n-max([x+ y for x,y in zip(find(sl),find(sl[::-1])[::-1])])+1)


函数使用经典的tail数组找最长递增子序列,然后运用两次得到一个每个位置的左边最长增长长度和右边最长增长长度,每个位置的两边最长长度相加取最大值即为合唱队的最大长度+1,这时使用n减这个值加1即为所求的最小剔除

全部评论

相关推荐

明天不下雨了_人机版:让我们大声的说出来:以前的未来就是现在
点赞 评论 收藏
分享
迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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