LeetCode 1851: Minimum Interval To Include Each Query — Step-by-Step Visual Trace
Medium — Heap | Sorting | Array | Greedy
The Problem
Given a list of intervals and queries, find the minimum length interval that contains each query point, returning -1 if no interval contains the query.
Approach
Sort intervals by start time and queries by value. Use a min-heap to track valid intervals by length, adding intervals as queries progress and removing expired ones. The heap maintains the smallest valid interval for each query.
Time: O(n log n + m log m + (n + m) log n) · Space: O(n + m)
Code
import heapq
class Solution:
def minInterval(self, intervals: List[List[int]], queries: List[int]) -> List[int]:
intervals.sort(key=lambda x: x[0])
queries_sorted = sorted(enumerate(queries), key=lambda x: x[1])
min_heap = []
ans = [-1] * len(queries)
i = 0
for query_index, query in queries_sorted:
while i < len(intervals) and intervals[i][0] <= query:
start, end = intervals[i]
heapq.heappush(min_heap, (end - start + 1, end))
i += 1
while min_heap and min_heap[0][1] < query:
heapq.heappop(min_heap)
if min_heap:
ans[query_index] = min_heap[0][0]
return ans
Watch It Run
Try it yourself: Open TraceLit and step through every line.
Built with TraceLit — the visual algorithm tracer for LeetCode practice.
Comments