Skip to content

Commit d234e83

Browse files
authoredNov 17, 2021
Create 2054-two-best-non-overlapping-events.js
1 parent c58974c commit d234e83

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed
 
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
2+
/**
3+
* @param {number[][]} events
4+
* @return {number}
5+
*/
6+
const maxTwoEvents = function(events) {
7+
const n = events.length
8+
events.sort((a, b) => a[0] - b[0])
9+
const dp = Array.from({ length: n }, () => Array(3).fill(-1))
10+
11+
return dfs(0, 0)
12+
13+
function dfs(idx, cnt) {
14+
if(cnt === 2 || idx >= n) return 0
15+
if(dp[idx][cnt] === -1) {
16+
let end = events[idx][1]
17+
let lo = idx + 1, hi = n - 1;
18+
while (lo < hi) {
19+
const mid = lo + ((hi - lo) >> 1);
20+
if (events[mid][0] <= end) lo = mid + 1
21+
else hi = mid;
22+
}
23+
const include = events[idx][2] + (lo < n && events[lo][0] > end ? dfs(lo, cnt + 1) : 0);
24+
const exclude = dfs(idx + 1, cnt);
25+
dp[idx][cnt] = Math.max(include, exclude);
26+
}
27+
28+
return dp[idx][cnt]
29+
}
30+
};

0 commit comments

Comments
 (0)
Please sign in to comment.