Given an array of integers nums and an integer limit, return the size of the longest non-empty subarray such that the absolute difference between any two elements of this subarray is less than or equal to limit.
Example 1:
Input: nums = [8,2,4,7], limit = 4 Output: 2 Explanation: All subarrays are: [8] with maximum absolute diff |8-8| = 0 <= 4. [8,2] with maximum absolute diff |8-2| = 6 > 4. [8,2,4] with maximum absolute diff |8-2| = 6 > 4. [8,2,4,7] with maximum absolute diff |8-2| = 6 > 4. [2] with maximum absolute diff |2-2| = 0 <= 4. [2,4] with maximum absolute diff |2-4| = 2 <= 4. [2,4,7] with maximum absolute diff |2-7| = 5 > 4. [4] with maximum absolute diff |4-4| = 0 <= 4. [4,7] with maximum absolute diff |4-7| = 3 <= 4. [7] with maximum absolute diff |7-7| = 0 <= 4. Therefore, the size of the longest subarray is 2.
Example 2:
Input: nums = [10,1,2,4,7,2], limit = 5 Output: 4 Explanation: The subarray [2,4,7,2] is the longest since the maximum absolute diff is |2-7| = 5 <= 5.
Example 3:
Input: nums = [4,2,2,2,4,4,2,2], limit = 0 Output: 3
Constraints:
1 <= nums.length <= 10^51 <= nums[i] <= 10^90 <= limit <= 10^9
----------------------------------------------------------
Heap, rb tree could not achieve O(n) solution, deque is easy for this problem:
from collections import deque
class Solution:
def longestSubarray(self, nums, limit: int) -> int:
mind,maxd,off = deque(),deque(),0
for num in nums:
while (maxd and num>maxd[-1]):
maxd.pop()
while (mind and num<mind[-1]):
mind.pop()
maxd.append(num)
mind.append(num)
if (maxd[0]-mind[0] > limit):
if (maxd[0] == nums[off]):
maxd.popleft()
if (mind[0] == nums[off]):
mind.popleft()
off+=1
return len(nums)-off
s = Solution()
print(s.longestSubarray(nums = [10,1,2,4,7,2], limit = 5))
Other deque examples:
Constrained Subsequence Sum
Number of Substrings Containing All Three Characters
Count Number of Nice Subarrays
Replace the Substring for Balanced String
Max Consecutive Ones III
Binary Subarrays With Sum
Subarrays with K Different Integers
Fruit Into Baskets
Shortest Subarray with Sum at Least K
Minimum Size Subarray Sum

本文介绍了一种使用双端队列(deque)解决最长子数组问题的方法,目标是在给定数组中找到最长的非空子数组,使得该子数组中任意两个元素之间的绝对差不超过指定限制。通过实例演示了算法的具体应用,包括输入、输出和详细解释。
1997

被折叠的 条评论
为什么被折叠?



