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

https://leetcode.com/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit/

solution

class Solution:
    def longestSubarray(self, nums: List[int], limit: int) -> int:
        res = 1
        for i in range(len(nums)):
            max_heap = [-nums[i]]  # 大堆,小堆保证新加入的不超过上限limit, 也不超过下限limit
            min_heap = [nums[i]]

            for j in range(i+1, len(nums)):
                # 两个堆主要是方便确认limit
                if abs(-max_heap[0] - nums[j]) <= limit and abs(min_heap[0] - nums[j]) <= limit:
                    heapq.heappush(max_heap, -nums[j])
                    heapq.heappush(min_heap, nums[j])
                else:
                    break

                res = max(res, len(max_heap))
        return res
  • 双heap

时间复杂度:O() 空间复杂度:O()

  • TreeMap

时间复杂度:O() 空间复杂度:O()

  • 单调双端队列

时间复杂度:O() 空间复杂度:O()

Last updated