88. Merge Sorted Array

Given two sorted array the goal is to merge them

Input
nums1 = [1,2,3,0,0,0], m = 3, 
nums2 = [2,5,6], n = 3

Output
[1,2,2,3,5,6]

the first array has capacity to hold to the merged sorted array.


Intuition

  • Uses two pointers two track the current position in respective arrays

  • Since nums1 is of size $m+n$ use this extra space to store the merged array.

Approach

  • Iterate through the arrays from the end and place the larger element in the end of nums1.

Complexity

  • Time complexity : $\text{O}(m+n)$

    • Since we iterate over the $m+n$ array elements only once.

  • Space complexity : $\text{O}(1)$

    • Not using any extra space, apart from the one provided

Code

int i  = m-1 , j = n-1; 

// Start filling the merged array from end
for(int k = n+m-1; k >= 0; k--) {
	// We compare if there are elements left in one of the array 
	// if all elements are finished simply put all the remaining 
	// elements
	if(i >= 0 && j >= 0) {
		nums1[k]= nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
	} else if (i >=0) {
		nums1[k] = nums1[i--];
	} else {
		nums1[k] = nums2[j--];
	}
}

Last updated