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

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

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

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

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

  • i:= 0,n:=尺寸a,res:= -无穷大
  • 当i < n-2时,进行如下操作
    • st:= i
    • linc:= 0,ldec:= 0
    • 当i < n-1且a [i] < a [i + 1]时
      • linc:= linc + 1
      • i:= i + 1
    • 当i < n-1且a [i]> a [i + 1]时
      • ldec:= ldec + 1
      • i:= i + 1
    • 如果linc > 0且ldec > 0,则
      • res:= res和(i-st + 1)的最大值
    • 当i < n-1且a [i]与a [i + 1]相同时
      • i:= 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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程