Back to all solutions
#1851 - Minimum Interval to Include Each Query
Problem Description
You are given a 2D integer array intervals, where intervals[i] = [lefti, righti] describes the ith interval starting at lefti and ending at righti (inclusive). The size of an interval is defined as the number of integers it contains, or more formally righti - lefti + 1.
You are also given an integer array queries. The answer to the jth query is the size of the smallest interval i such that lefti <= queries[j] <= righti. If no such interval exists, the answer is -1.
Return an array containing the answers to the queries.
Solution
/**
* @param {number[][]} intervals
* @param {number[]} queries
* @return {number[]}
*/
var minInterval = function(intervals, queries) {
intervals.sort((a, b) => a[0] - b[0]);
const sortedQueries = queries
.map((q, i) => [q, i])
.sort((a, b) => a[0] - b[0]);
const activeIntervals = new PriorityQueue((a, b) => a[0] - b[0]);
const result = new Array(queries.length).fill(-1);
let intervalIndex = 0;
for (const [queryValue, queryIndex] of sortedQueries) {
while (intervalIndex < intervals.length && intervals[intervalIndex][0] <= queryValue) {
const [start, end] = intervals[intervalIndex];
activeIntervals.enqueue([end - start + 1, end]);
intervalIndex++;
}
while (!activeIntervals.isEmpty() && activeIntervals.front()?.[1] < queryValue) {
activeIntervals.dequeue();
}
if (!activeIntervals.isEmpty()) {
result[queryIndex] = activeIntervals.front()[0];
}
}
return result;
};