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

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

因此,如果输入类似于nums = [30,11,12,13,14,14,15,18,17,32],则输出将为7,因为当我们从列表中删除18时,我们可以得到[11, [12、13、14、15、17、32],这是最长,连续且严格增加的子列表,其长度为7。

为了解决这个问题,我们将按照以下步骤操作:

  • n:= nums的大小

  • pre:=大小为n并以1s填充的列表

  • 对于范围在1到n-1之间的i

    • pre [i]:= pre [i-1] + 1

    • 如果nums [i]> nums [i-1],则

    • suff:=大小为n并以1s填充的列表

    • 对于范围在n-2到-1的i,减1,

      • suff [i]:= suff [i + 1] +1

      • 如果nums [i] <nums [i + 1],则

    • ans:= pre最大值和suff最大值的最大值

    • 对于范围在1到n-1之间的i

      • ans:= ans的最大值和(pre [i-1] + suff [i + 1])

      • 如果nums [i-1] <nums [i + 1],则

    • 返回ans

    让我们看下面的实现以更好地理解-

    示例

    class Solution:

       def solve(self, nums):

          n = len(nums)

          pre = [1] * n

          for i in range(1, n - 1):

             if nums[i] > nums[i - 1]:

                pre[i] = pre[i - 1] + 1

          suff = [1] * n

          for i in range(n - 2, -1, -1):

             if nums[i] < nums[i + 1]:

                suff[i] = suff[i + 1] + 1

                   ans = max(max(pre), max(suff))

                   for i in range(1, n - 1):

                      if nums[i - 1] < nums[i + 1]:

                         ans = max(ans, pre[i - 1] + suff[i + 1])

                   return ans

    ob = Solution()nums = [30, 11, 12, 13, 14, 15, 18, 17, 32]

    print(ob.solve(nums))

    输入值

    [30, 11, 12, 13, 14, 15, 18, 17, 32]

    输出结果

    7

    以上是 在Python中查找连续严格增加的子列表的长度的程序 的全部内容, 来源链接: utcz.com/z/348883.html

    回到顶部