题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个数组和一个限制数字 limit,要求返回一个最长连续子数的长度,其中任意两个数字之差不能超过 limit

思路分享

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution:
def longestSubarray(self, nums: List[int], limit: int) -> int:
max_q = deque()
min_q = deque()
res = 0
left = 0
for i, x in enumerate(nums):
while max_q and x > nums[max_q[-1]]:
max_q.pop()
max_q.append(i)
while min_q and x < nums[min_q[-1]]:
min_q.pop()
min_q.append(i)

while nums[max_q[0]] - nums[min_q[0]] > limit:
left += 1
if left > max_q[0]:
max_q.popleft()
if left > min_q[0]:
min_q.popleft()

res = max(res, i-left+1)

return res