1
+ // Challenge: Given two sorted numerical arrays,
2
+ // merge them into a sorted array
3
+ //
4
+ // Example:
5
+ // Input: [1,3,8,9] and [2,5,7]
6
+ // Output: [1,2,3,5,7,8,9]
7
+
8
+
9
+ function mergeSortedArrays ( arr1 : number [ ] , arr2 : number [ ] ) : Array < number > { // Time Complexity: O(a+b)
10
+ const largeSorted : number [ ] = [ ] ;
11
+
12
+
13
+ for ( let i = 0 , j = 0 ; i <= arr1 . length && j <= arr2 . length ; ) {
14
+
15
+ if ( i === arr1 . length && j === arr2 . length ) {
16
+ // console.log("Processed both arrays!")
17
+ break ;
18
+ }
19
+
20
+ if ( i === arr1 . length ) {
21
+ largeSorted . push ( arr2 [ j ] ) ;
22
+ ++ j ;
23
+ // console.log('Pushing', largeSorted[largeSorted.length-1], ' New j:', j);
24
+ continue ;
25
+ }
26
+
27
+ if ( j === arr2 . length ) {
28
+ largeSorted . push ( arr1 [ i ] ) ;
29
+ ++ i ;
30
+ // console.log('Pushing', largeSorted[largeSorted.length-1], ' New i:', i);
31
+ continue ;
32
+ }
33
+
34
+ if ( arr1 [ i ] < arr2 [ j ] ) {
35
+ largeSorted . push ( arr1 [ i ] ) ;
36
+ ++ i ;
37
+ // console.log('Pushing', largeSorted[largeSorted.length-1], ' New i:', i);
38
+ } else {
39
+ largeSorted . push ( arr2 [ j ] )
40
+ ++ j ;
41
+ // console.log('Pushing', largeSorted[largeSorted.length-1], ' New j:', j);
42
+ }
43
+ }
44
+
45
+ return largeSorted ;
46
+ }
47
+
48
+
49
+ const arr1 = [ 1 , 3 , 8 , 9 ] ;
50
+ const arr2 = [ 2 , 5 , 7 ] ;
51
+
52
+ console . log ( mergeSortedArrays ( arr1 , arr2 ) ) ; // O(a+b)
53
+ console . log ( mergeSortedArrays ( [ 4 , 6 , 30 ] , [ 0 , 3 , 4 , 31 ] ) ) ; // O(a+b)
54
+ console . log ( mergeSortedArrays ( [ 2 , 4 , 8 , 16 , 32 ] , [ ] ) ) ; // O(a+b)
55
+ console . log ( mergeSortedArrays ( [ ] , [ ] ) ) ; // O(a+b)
0 commit comments