寻找包含 Python 中每个查询的最小间隔的程序
假设我们有一个区间列表,其中区间[i]有一对(left_i,right_i)表示第i个区间,从left_i开始到right_i结束(两者都包括在内)。我们还有另一个称为查询的数组。第j个查询的答案是最小区间i的大小,使得left_i<=queries[j]<=right_i。如果我们找不到这样的区间,则返回-1。我们必须找到一个包含查询答案的数组。
因此,如果输入类似于intervals=[[2,5],[3,5],[4,7],[5,5]]queries=[3,4,5,6],那么输出将是[3,3,1,4],因为查询处理如下-
对于query=3:区间[3,5]是最小的一个,包含3。所以,5-3+1=3。
forquery=4:区间[3,5]是最小的一个,包含4。所以,5-3+1=3。
forquery=5:区间[5,5]是最小的一个,包含5。所以,5-5+1=1。
对于query=6:区间[4,7]是最小的一个,包含6。所以,7-4+1=4。
示例
让我们看下面的实现来更好地理解
import heapq
def solve(intervals, queries):
   intervals = sorted(intervals)[::-1]
   h = []
   res = {}
   for q in sorted(queries):
      while intervals and intervals[-1][0] <= q:
         i, j = intervals.pop()
         if j >= q:
            heapq.heappush(h, [j - i + 1, j])
      while h and h[0][1] < q:
         heapq.heappop(h)
      res[q] = h[0][0] if h else -1
   return [res[q] for q in queries]
intervals = [[2,5],[3,5],[4,7],[5,5]]
queries = [3,4,5,6]
print(solve(intervals, queries))输入
[[2,5],[3,5],[4,7],[5,5]], [3,4,5,6]输出结果
[3, 3, 1, 4]
