题解 | #合唱队#
合唱队
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了而且平均快很多
查看16道真题和解析