在Python中找到差异小于k的最长子列表的长度

在Python中找到差异小于k的最长子列表的长度

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

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

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

  • 创建两个双端队列maxd,mind
  • i:= 0,res:= 1
  • 对于A中的每个索引j和值a,执行以下操作
    • 当maxd不为0且a>maxd的最后一个元素时,执行以下操作
      • 从maxd中删除最后一个元素
    • 当mind不为0且a<mind的最后一个元素时,执行以下操作
      • 从mind中删除最后一个元素
    • 在maxd的末尾插入a
    • 在mind的末尾插入a
    • 当maxd [0] – mind [0] >限制时,执行以下操作
      • 如果maxd [0]与A [i]相同,则
      • 从maxd的左侧删除项目
      • 如果mind [0]与A [i]相同,则
      • 从mind的左侧删除项目
      • i:= i + 1
    • res:= res和(j-i +1)的最大值
  • 返回res

让我们看以下代码实现以更好地理解-

更多Python相关文章,请阅读:Python 教程

例如

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教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程