题解 | #合唱队#

合唱队

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

# 动态规划
def lengthOfLIS(lst):
    dp = []
    for i in range(len(lst)):
        dp.append(1)
        for j in range(i):
            if lst[i] > lst[j]:
                dp[i] = max(dp[i], dp[j] + 1)
    return dp # 每人左边可以站的人数

while True:
    try:
        n, heights = int(input()), list(map(int, input().split()))
        # dp1:每人左边可以站的人数,dp2:每人右边可以站的人数
        dp1, dp2 = lengthOfLIS(heights), lengthOfLIS(heights[::-1])[::-1]
        res = []
        for i in range(len(dp1)):
            res.append(dp1[i] + dp2[i] - 1)
        print(n-max(res))
    except:
        break
全部评论
运行超时啊这个
1 回复 分享
发布于 2022-12-03 11:39 新加坡
try 放在while 外面,省时间
点赞 回复 分享
发布于 2021-11-28 23:42
有点没看懂为什么d[j]+1,i不是一定再j的后面吗,d[i]已经是最长的了啊?
点赞 回复 分享
发布于 2022-01-09 22:57
精辟大佬就是大佬啊,一遍看下来思路很清晰,唯一没想通为什么d[i].append(1),于是我按我思路换成了d[i].append(0), 后面算整队长度换成dp1[i]+dp2[i]+1,结果也是一样,再接着就理解了
点赞 回复 分享
发布于 2023-02-28 22:29 四川
天才
点赞 回复 分享
发布于 08-01 22:07 广东

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
25 10 评论
分享
牛客网
牛客企业服务