跳到主要内容

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))