Table of Contents
Problem Statement
Merge Sorted Array LeetCode Solution – You are given two integer arrays nums1
and nums2
, sorted in non-decreasing order, and two integers m
and n
, representing the number of elements in nums1
and nums2
respectively.
Merge nums1
and nums2
into a single array sorted in non-decreasing order.
The final sorted array should not be returned by the function, but instead be stored inside the array nums1
. To accommodate this, nums1
has a length of m + n
, where the first m
elements denote the elements that should be merged and the last n
elements are set to 0
and should be ignored. nums2
has a length of n
.
Example
Test Case 1:
Input:
nums1 = [1, 2, 3, 0, 0, 0]
m = 3
nums2 = [2, 5, 6]
n = 3
Output:
[1, 2, 2, 3, 5, 6]
Explanation
The arrays we are merging are [1,2,3] and [2,5,6].The result of the merge is [1,2,2,3,5,6] with the underlined elements coming from nums1.
Approach:
Solution 01
- We took j=0 to iterate nums2 from the beginning.
- As we know nums1 has a size of m+n & only the first m elements should be in the final array.
- So we replace all the elements from the m index with all the elements of nums2.
- Finally, we’ll sort the array nums1 to get the final sorted array.
- Time complexity: O(nlogn) //as sorting takes nlogn time.
Solution 02
- Same logic as Solution 01, But here we used resize().
- Resize() will simply keep the elements till m index in muns1 array.
- Then we’ll insert all the elements of the nums2 array by using insert().
- Lastly, we’ll sort the array nums1 to get the final sorted array.
- Time complexity: O(nlogn) //as sorting takes nlogn time.
Solution 03
- As both solutions 01 & 02 take O(nlogn), now we try to solve it with O(n+m).
- We will use the reverse sorting method.
- We took 3 variables: i (last valid element of nums1 that will present in the final array), j (last element of nums2) & k ( last index of nums1)
- First, while loop will compare nums1 & nums2, and the greater element will be in nums1[k].
- After the loop end if there are still any elements left in an array they will be added by the next 2 while loop.
- Time complexity: O(m+n).
Code for Merge Sorted Array
Python Program
class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: i, j, cur = m - 1, n - 1, m + n - 1 while j > -1: if i > -1 and nums1[i] >= nums2[j]: nums1[cur] = nums1[i] i -= 1 else: nums1[cur] = nums2[j] j -= 1 cur -= 1
Java Program
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int last1 = m-1; int last2 = n-1; int index = nums1.length-1; while (last1 >=0 && last2>=0) { int l = nums1[last1]; int r = nums2[last2]; if (l < r) { nums1[index--] = r; last2--; } else { nums1[index--] = l; last1--; } } while (last2 >=0) { int r = nums2[last2]; nums1[index--] = r; last2--; } } }
Complexity Analysis for Merge Sorted Array LeetCode Solution
Time Complexity: O(m+n) where m and n are the number of non-zero elements in nums1 and nums2 respectively since we are iterating over both arrays in order to merge them
Space Complexity: O(1) since we are doing the merging in place.