Skip to main content

1438.js

/** ------------------------------------------------------------------------------
*
* 1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit
* Topics: Sliding Window, Queue
* https://leetcode.com/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit/description
*
------------------------------------------------------------------------------ */
/**
* @param {number[]} nums
* @param {number} limithttps://leetcode.com/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit/description/?envType=daily-question&envId=2024-06-23
* @return {number}
*/
var longestSubarray = function (nums, limit) {
const maxQueue = []
const minQueue = []
let start = 0
let res = 0

for (let end = 0; end < nums.length; end++) {
const num = nums[end]
while (maxQueue.length > 0 && maxQueue[maxQueue.length - 1] < num) {
maxQueue.pop()
}

while (minQueue.length > 0 && minQueue[minQueue.length - 1] > num) {
minQueue.pop()
}
maxQueue.push(num)
minQueue.push(num)
if (maxQueue[0] - minQueue[0] > limit) {
if (maxQueue[0] === nums[start]) {
maxQueue.shift()
}

if (minQueue[0] === nums[start]) {
minQueue.shift()
}

start += 1
}
res = Math.max(res, end - start + 1)
}

return res
}

console.log()