File tree 1 file changed +34
-0
lines changed
1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change
1
+ // 🚀 My own approach!
2
+ // ✅ Time Complexity: O(n log n), where n is the number of intervals
3
+ // ✅ Space Complexity: O(n) (due to the stack storage)
4
+
5
+ /**
6
+ * @param {number[][] } intervals
7
+ * @return {number[][] }
8
+ */
9
+ var merge = function ( intervals ) {
10
+ intervals . sort ( ( a , b ) => a [ 0 ] - b [ 0 ] ) ;
11
+ // Sorting takes O(n log n) time, where n is the number of intervals.
12
+ // JavaScript's sort() is O(1) (in-place) for sorting in most cases.
13
+
14
+ let start = intervals [ 0 ] [ 0 ] ;
15
+ let end = intervals [ 0 ] [ 1 ] ;
16
+ let stack = [ intervals [ 0 ] ] ; // O(n) additional space usage.
17
+
18
+ for ( const [ s , e ] of intervals ) {
19
+ // This takes O(n) time.
20
+ const [ prevStart , prevEnd ] = stack [ stack . length - 1 ] ;
21
+
22
+ if ( prevStart <= s && s <= prevEnd ) {
23
+ start = Math . min ( s , start ) ;
24
+ end = Math . max ( e , end ) ;
25
+ stack . pop ( ) ;
26
+ } else {
27
+ start = s ;
28
+ end = e ;
29
+ }
30
+ stack . push ( [ start , end ] ) ;
31
+ }
32
+ return stack ;
33
+ } ;
34
+
You can’t perform that action at this time.
0 commit comments