程序在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