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