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