程序查找最长子列表的长度,其中最小和最大之间的差小于Python中的k

假设我们有一个称为nums的数字列表,另一个值为k,我们必须找到最长子列表的长度,其中最大和最小元素之间的绝对差为≤k。

因此,如果输入像nums = [2,4,6,10] k = 4,则输出将为3,因为我们可以选择pick [2,4,6],这里的绝对差为4。

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

  • 记住,创建两个双端队列maxd

  • i:= 0,res:= 1

  • 对于A中的每个索引j和值a

    • 如果maxd [0]与A [i]相同,则

    • 如果mind [0]与A [i]相同,则

    • 我:=我+ 1

    • 从maxd左侧删除项目

    • 从左侧删除项目

    • 从头脑中删除最后一个元素

    • 从maxd删除最后一个元素

    • 当maxd不为0且> maxd的最后一个元素时,执行

    • 当心不为0且心的<最后一个元素时,

    • 在maxd的末尾插入

    • 在心底插入

    • 而maxd [0]-mind [0]>限制,做

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

    • 返回资源

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

    示例

    from collections import deque, defaultdict
    class Solution:
       def solve(self, A, limit):
          maxd = deque()      mind = deque()      i = 0
          res = 1
          for j, a in enumerate(A):
             while maxd and a > maxd[-1]:
                maxd.pop()
             while mind and a < mind[-1]:
                mind.pop()
             maxd.append(a)
             mind.append(a)
             while maxd[0] - mind[0] > limit:
                if maxd[0] == A[i]:
                   maxd.popleft()
                if mind[0] == A[i]:
                   mind.popleft()
                i += 1
                res = max(res, j - i + 1)
          return res
    ob = Solution()nums = [2, 4, 6, 10]
    k = 4
    print(ob.solve(nums, k))

    输入项

    [2, 4, 6, 10], 4

    输出结果

    3
    猜你喜欢