程序在Python中查找具有给定条件的最长子列表的长度
假设我们有一个称为nums的数字列表,我们必须找到最长子列表的长度,其中2 *最小子列表>最大子列表。
因此,如果输入像nums = [10,2,6,6,4,4,4],则输出将为4,因为子列表[6,6,4,4]是保存条件的最长子列表如2 * 4> 6。
为了解决这个问题,我们将按照以下步骤操作:
ret:= 0
定义两个双端队列minq和maxq
l:= 0,r:= 0
当r <nums的大小时
如果minq [0]与l相同,则
如果maxq [0]与l相同,则
l:= l + 1
删除minq的第一个元素
删除maxq的第一个元素
从maxq删除最后一个元素
从minq中删除最后一个元素
n:= nums [r]
而minq和n <nums [minq的最后一个元素],
在minq的末尾插入r
而maxq和n> nums [maxq的最后一个元素],
在maxq的末尾插入r
r:= r + 1
当l <r和nums [minq [0]] * 2 <= nums [maxq [0]]时,
ret:= ret的最大值和(r-l)
返回ret
让我们看下面的实现以更好地理解-
示例
class Solution:def solve(self, nums):
from collections import deque
ret = 0
minq, maxq = deque(), deque() l, r = 0, 0
while r < len(nums):
n = nums[r]
while minq and n < nums[minq[-1]]:
minq.pop()
minq.append(r)
while maxq and n > nums[maxq[-1]]:
maxq.pop()
maxq.append(r)
r += 1
while l < r and nums[minq[0]] * 2 <= nums[maxq[0]]:
if minq[0] == l:
minq.popleft()
if maxq[0] == l:
maxq.popleft()
l += 1
ret = max(ret, r - l)
return ret
ob = Solution()nums = [10, 2, 6, 6, 4, 4]
print(ob.solve(nums))
输入值
[10, 2, 6, 6, 4, 4]
输出结果
4
以上是 程序在Python中查找具有给定条件的最长子列表的长度 的全部内容, 来源链接: utcz.com/z/356252.html