1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit

Question

CleanShot 2024-10-31 at 22.40.58.png

Code

class Solution:
    def longestSubarray(self, nums: List[int], limit: int) -> int:
        
        max_q = deque()
        min_q = deque()

        l = 0

        N = len(nums)

        max_len = 0
        l = 0

        for r in range(N):
            
            while max_q and max_q[-1] < nums[r]:
                max_q.pop()


            while min_q and min_q[-1] > nums[r]:
                min_q.pop()

            max_q.append(nums[r])
            min_q.append(nums[r])

            while max_q[0] - min_q[0] > limit:
                if max_q[0] == nums[l]:
                    max_q.popleft()
                elif min_q[0] == nums[l]:
                    min_q.popleft()

                l += 1

            max_len = max(max_len, r - l + 1)

        return max_len