File tree Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change
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
+ } ;
You can’t perform that action at this time.
0 commit comments