1671.得到山形数组的最少删除次数
链接:1671.得到山形数组的最少删除次数
难度:Hard
标签:贪心、数组、二分查找、动态规划
简介:给你整数数组 nums ,请你返回将 nums 变成 山形状数组 的 最少 删除次数。
题解 1 - python
- 编辑时间:2023-12-22
- 执行用时:2260ms
- 内存消耗:17.11MB
- 编程语言:python
- 解法介绍:对两边求最长子序列。
def getList(nums: List[int]) -> List[int]:
        n = len(nums)
        dp = [1] * n
        for i in range(n):
            for j in range(i):
                if nums[i] > nums[j]:
                    dp[i] = max(dp[i], dp[j] + 1)
        return dp
    
    class Solution:
        def minimumMountainRemovals(self, nums: List[int]) -> int:
            n = len(nums)
            prev = getList(nums)
            next = getList(nums[::-1])[::-1]
            return n - max(prev[i] + next[i] - 1 if prev[i] > 1 and next[i] > 1 else 0 for i in range(n))