在Python中删除后查找最长连续严格增加子列表的长度的程序

假设我们有一个名为 nums 的数字列表,我们必须找到一个连续严格递增的子列表的最大长度。我们最多可以从列表中删除一个元素。

所以,如果输入像 nums = [35, 5, 6, 7, 8, 9, 12, 11, 26],那么输出将是 7,因为如果我们从 nums 中删除 12,列表将是 [5 , 6, 7, 8, 9, 11, 26],长度为7,这是最长的、连续的、严格递增的子表。

示例

让我们看看以下实现以获得更好的理解 -

def solve(nums):
   if not nums:
      return 0
   end = [1 for i in nums]
   start = [1 for i in nums]

   for i in range(1, len(nums)):
      if nums[i] > nums[i - 1]:
         end[i] = end[i - 1] + 1

   for j in range(len(nums) - 2, -1, -1):
      if nums[j + 1] > nums[j]:
         start[j] = start[j + 1] + 1

   res = max(max(end), max(start))

   for k in range(1, len(nums) - 1):
      if nums[k - 1] < nums[k + 1]:
         res = max(res, end[k - 1] + start[k + 1])

   return res

nums = [35, 5, 6, 7, 8, 9, 12, 11, 26]
print(solve(nums))

输入

[35, 5, 6, 7, 8, 9, 12, 11, 26]
输出结果
7

猜你喜欢