题解 | #合唱队#

合唱队

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

这个思路就是对每一个位置上的元素先找它左边的增序列,再找它右边的减序列,同时记录下最长的长度,最后用总人数减去最大的人数就可以了。

这段代码是正确可运行的,就是复杂度太高了,我用自己的编辑器可以得到所有正确答案,就是超时,一点优化的思路是压缩循环,直接遍历全元素的dp增序列和减序列

n = int(input())
talls = list(map(int, input().split()))


if n < 3:
    print(0)
else:
    members = 0
    for i in range(1, n - 1):
        dpl = [0] * (i + 1)
        for il in range(1, i + 1):
            for j in range(0, il):
                if talls[il] > talls[j]:
                    dpl[il] = max(dpl[il], dpl[j] + 1)
        dpr = [0] * n
        for ir in range(n - 2, i - 1, -1):
            for k in range(n - 1, ir, -1):
                if talls[ir] > talls[k]:
                    dpr[ir] = max(dpr[ir], dpr[k] + 1)

        if dpl[i] != 0 and dpr[i] != 0:
            members = max(dpl[i] + dpr[i] + 1, members)
    print(n - members)
全部评论

相关推荐

不懂!!!:感觉你的项目描述太简单了,建议使用star描述法优化提炼一下,就是使用什么技术或方案解决了什么问题,有什么效果或成果,例如:对axios进行了二次封装,实现了请求的统一管理、错误的集中处理以及接口调用的简化,显著提高了开发效率和代码维护性,使用canvas技术实现了路线绘制功能,通过定义路径绘制函数和动态更新机制,满足了简化的导航可视化需求,提升了用户体验。像什么是使用其他组件库,基本功能描述就最好不要写到项目成果里面去了,加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务