程序查找最长子列表的长度,其中最小和最大之间的差小于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

    以上是 程序查找最长子列表的长度,其中最小和最大之间的差小于Python中的k 的全部内容, 来源链接: utcz.com/z/353395.html

    回到顶部