Skip to content

Commit c73e6f9

Browse files
committed
Add solution #436
1 parent 41f3c05 commit c73e6f9

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@
346346
433|[Minimum Genetic Mutation](./0433-minimum-genetic-mutation.js)|Medium|
347347
434|[Number of Segments in a String](./0434-number-of-segments-in-a-string.js)|Easy|
348348
435|[Non-overlapping Intervals](./0435-non-overlapping-intervals.js)|Medium|
349+
436|[Find Right Interval](./0436-find-right-interval.js)|Medium|
349350
437|[Path Sum III](./0437-path-sum-iii.js)|Medium|
350351
438|[Find All Anagrams in a String](./0438-find-all-anagrams-in-a-string.js)|Medium|
351352
441|[Arranging Coins](./0441-arranging-coins.js)|Easy|

solutions/0436-find-right-interval.js

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

0 commit comments

Comments
 (0)