-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy path0436-find-right-interval.js
43 lines (38 loc) · 1.15 KB
/
0436-find-right-interval.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
* 436. Find Right Interval
* https://leetcode.com/problems/find-right-interval/
* Difficulty: Medium
*
* You are given an array of intervals, where intervals[i] = [starti, endi] and each
* starti is unique.
*
* The right interval for an interval i is an interval j such that startj >= endi and
* startj is minimized. Note that i may equal j.
*
* Return an array of right interval indices for each interval i. If no right interval
* exists for interval i, then put -1 at index i.
*/
/**
* @param {number[][]} intervals
* @return {number[]}
*/
var findRightInterval = function(intervals) {
const lookup = intervals.map(([start], i) => [start, i])
.sort((a, b) => a[0] - b[0]);
const result = new Array(intervals.length);
for (let i = 0; i < intervals.length; i++) {
const target = intervals[i][1];
let left = 0;
let right = lookup.length - 1;
while (left <= right) {
const middle = Math.floor((left + right) / 2);
if (lookup[middle][0] >= target) {
right = middle - 1;
} else {
left = middle + 1;
}
}
result[i] = left < lookup.length ? lookup[left][1] : -1;
}
return result;
};