程序在Python中找到最长严格递增然后递减的子列表的长度

假设我们有一个称为nums的数字列表。我们必须找到最长子列表的长度,以使(最小长度3)其值严格递增然后递减。

因此,如果输入类似于nums = [7,1,3,5,2,0],则输出将为5,因为子列表[2,4,6,6,3,1]严格增加然后减小。

为了解决这个问题,我们将遵循以下步骤-

  • i:= 0,n:= a的大小,res:=-无穷大

  • 当我<n-2时

    • 我:=我+ 1

    • res:= res和(i-st + 1)的最大值

    • ldec:= ldec + 1

    • 我:=我+ 1

    • 锌:=锌+ 1

    • 我:=我+ 1

    • st:=我

    • linc:= 0,ldec:= 0

    • 当i <n-1且a [i] <a [i + 1]时,

    • 当i <n-1且a [i]> a [i + 1]时,

    • 如果linc> 0且ldec> 0,则

    • 当i <n-1并且a [i]与a [i + 1]相同时,

    • 如果res> = 0,则返回res,否则返回0

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

    示例

    class Solution:
       def solve(self, a):
          i, n, res = 0, len(a), float("-inf")
          while i < n - 2:
             st = i
             linc, ldec = 0, 0
             while i < n - 1 and a[i] < a[i + 1]:
                linc += 1
                i += 1
             while i < n - 1 and a[i] > a[i + 1]:
                ldec += 1
                i += 1
             if linc > 0 and ldec > 0:
                res = max(res, i - st + 1)
             while i < n - 1 and a[i] == a[i + 1]:
                i += 1
          return res if res >= 0 else 0
    ob = Solution()nums = [8, 2, 4, 6, 3, 1]
    print(ob.solve(nums))

    输入值

    [[8, 2, 4, 6, 3, 1]

    输出结果

    5
    猜你喜欢