715. Range Module

https://leetcode.com/problems/range-module/

My Intuitive Solution using PriorityQueue

addRange:

use priorityQueue to merge intervals

queryRange:

one-pass check boundary

removeRange:

  1. If remove range no intercept, just add current interval

  2. if remove range inside current interval

  3. if remove range intercept left side of current interval

  4. if remove range intercept right side of current interval

import heapq
class RangeModule:

    def __init__(self):
        self.intervals = []
        

    def addRange(self, left: int, right: int) -> None:
        heapq.heappush(self.intervals,[left,right])
        #merge
        stack = []
        while self.intervals:
            curr = heapq.heappop(self.intervals)
            if not stack:
                stack.append(curr)
            else:
                if stack[-1][1] >= curr[0]:
                    prev = stack.pop()
                    stack.append([prev[0],max(prev[1],curr[1])])
                else:
                    stack.append(curr)
        self.intervals = stack
        # print("add interval")
        # print(self.intervals)

    def queryRange(self, left: int, right: int) -> bool:
        # print("Query")
        # print("{} {}".format(left,right))
        # print(self.intervals)
        for interval in self.intervals:
            if left >= interval[0] and interval[1] >= right:
                return True
        return False

    def removeRange(self, left: int, right: int) -> None:
        arr = []
        for interval in self.intervals:
            if interval[1] <= left or interval[0] >= right:
                arr.append(interval)
            else:
                if interval[0] < left and right < interval[1]:
                    arr.append([interval[0],left])
                    arr.append([right,interval[1]])
                elif interval[1] > left and right>= interval[1]:
                    arr.append([interval[0],left])
                elif left <= interval[0] and interval[0] < right:
                    arr.append([right,interval[1]])
        self.intervals = arr
        # print("Remove interval")
        # print(self.intervals)

Last updated

Was this helpful?