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
posted @ 2020-12-11 08:38  童年の波鞋  阅读(92)  评论(0编辑  收藏  举报