打卡记录
得到山形数组的最少删除次数(线性DP + 前后缀分解)
链接
class Solution:def minimumMountainRemovals(self, nums: List[int]) -> int:n = len(nums)pre, suf = [1] * n, [1] * nfor i in range(n):for j in range(i):if nums[j] < nums[i]:pre[i] = max(pre[i], pre[j] + 1)if nums[n - 1 - i] > nums[n - 1 - j]:suf[n - 1 - i] = max(suf[n - 1 - i], suf[n - 1 - j] + 1)return min(n - (pre[i] + suf[i] - 1) for i in range(n) if pre[i] != 1 and suf[i] != 1)