LeetCode 1851 — Minimum Interval to Include Each Query

Sexto y último problema de Intervals — Hard. Offline processing: ordenar queries, procesarlos junto con intervalos en orden de start.

Enunciado

Para cada query q, encuentra el intervalo más pequeño que contiene q. Si ninguno, -1.


Solución — Sort queries + min-heap

import heapq
 
class Solution:
    def minInterval(self, intervals, queries):
        intervals.sort()
        sorted_q = sorted(enumerate(queries), key=lambda x: x[1])
        result = [-1] * len(queries)
        heap = []                                # (size, end)
        i = 0
        for q_idx, q in sorted_q:
            while i < len(intervals) and intervals[i][0] <= q:
                l, r = intervals[i]
                heapq.heappush(heap, (r - l + 1, r))
                i += 1
            while heap and heap[0][1] < q:
                heapq.heappop(heap)              # expirar intervalos cerrados
            if heap:
                result[q_idx] = heap[0][0]
        return result

Análisis: O((n + q) log (n + q)).


Cierre Intervals

#ProblemaIdea distintiva
157-insert-interval3 fases
256-merge-intervalsSort + scan
3435-non-overlapping-intervalsGreedy sort por end
4252-meeting-roomsSort + check vecinos
5253-meeting-rooms-iiMin-heap o two arrays
6EsteOffline queries + heap

Estado

  • Leído
  • Implementado desde cero
  • Resuelto en LeetCode
  • Patrón Intervals cerrado [OK]