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

    回到顶部