题解 | #合唱队#
合唱队
https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
##有参考大佬写的代码
N = int(input()) # 同学的总数
ls = list(map(int,input().split())) # N位同学的身高
ls1 = [1] * len(ls) # 存储长度 ##因为至少有一个自己本身,所以初始值设置为1
ls2 = [1] * len(ls)
# 假设正好第i位同学左右两边可以组成合唱队,那么说明i左边的都比他矮,i右边的也比他矮
# 先算左边的长度
for i in range(len(ls)):
for j in range(i):
if ls[i] > ls[j] and ls1[i] < ls1[j] + 1:
ls1[i] = ls1[j] + 1
#print(ls1)
# 再计算右边的最大长度(注意右边需要倒着来)
for i in range(len(ls)-1,-1,-1): # 注意这个结束位置是-1,因为本来要到取到位置0,但是range()函数不包含结束位置,所以要写-1
for k in range(len(ls)-1,i-1,-1):
if ls[i] > ls[k] and ls2[i] < ls2[k] + 1:
ls2[i] = ls2[k] + 1
#print(ls2)
###print(N-max(ls1)-max(ls2)+1) # 注意,不能写成这样的
p = 0
for i in range(N): # 186 186 150 200 160 130 197 200
if ls1[i] + ls2[i]-1 > p: # 注意是左右两个列表的对应位置相减
p = ls1[i] + ls2[i]-1
print(N-p)

