File tree Expand file tree Collapse file tree 1 file changed +10
-22
lines changed
non-overlapping-intervals Expand file tree Collapse file tree 1 file changed +10
-22
lines changed Original file line number Diff line number Diff line change 1
- // Time complexity: O(n^2 )
2
- // Space complexity: O(n )
1
+ // Time complexity: O(nlogn )
2
+ // Space complexity: O(1 )
3
3
4
4
/**
5
5
* @param {number[][] } intervals
@@ -14,34 +14,22 @@ var eraseOverlapIntervals = function (intervals) {
14
14
return a [ 0 ] - b [ 0 ] ;
15
15
} ) ;
16
16
17
- const dp = Array . from ( { length : intervals . length } , ( ) => 0 ) ;
18
-
19
- dp [ 0 ] = 1 ;
17
+ let count = 0 ;
18
+ let prevEnd = intervals [ 0 ] [ 1 ] ;
20
19
21
20
for ( let i = 1 ; i < intervals . length ; i ++ ) {
22
- const [ prevStart , prevEnd ] = intervals [ i - 1 ] ;
23
- const [ currentStart , currentEnd ] = intervals [ i ] ;
21
+ const [ start , end ] = intervals [ i ] ;
24
22
25
23
// 구간이 겹칠 때
26
- if ( currentStart < prevEnd ) {
27
- // 현재를 포함할 때
28
- let maxValue = 1 ;
29
- for ( let j = i - 1 ; j >= 0 ; j -- ) {
30
- const [ start , end ] = intervals [ j ] ;
31
-
32
- if ( end <= currentStart ) {
33
- maxValue += dp [ j ] ;
34
- break ;
35
- }
36
- }
37
-
38
- dp [ i ] = Math . max ( dp [ i - 1 ] , maxValue ) ;
24
+ if ( prevEnd > start ) {
25
+ count ++ ;
26
+ prevEnd = Math . min ( prevEnd , end ) ;
39
27
continue ;
40
28
}
41
29
42
30
// 구간이 겹치지 않을 때
43
- dp [ i ] = dp [ i - 1 ] + 1 ;
31
+ prevEnd = end ;
44
32
}
45
33
46
- return intervals . length - dp . at ( - 1 ) ;
34
+ return count ;
47
35
} ;
You can’t perform that action at this time.
0 commit comments