b_lc_得到山形数组的最少删除次数(问题转化:最长上升&下降子序列)
给你整数数组nums,请你返回将 nums 变成 山形状数组 的 最少 删除次数。
思路:分别找位置i左边的LIS与右边的LDS,细节还是有很多的
class Solution:
def minimumMountainRemovals(self, A: List[int]) -> int:
n,ans=len(A),0
f,g=[1]*n,[1]*n
for i in range(1,n):
for j in range(i):
if A[j]<A[i]: f[i]=max(f[i], f[j]+1)
for i in range(n-1,-1,-1):
for j in range(n-1,i,-1):
if A[j]<A[i]: g[i]=max(g[i], g[j]+1)
for i in range(1,n-1):
if f[i]>1 and g[i]>1:
ans=max(ans, f[i]+g[i]-1)
return n-ans