Merge Sorted Array
Merge Sorted Array
Problem Statement
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
Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
nums1: [1, 2, 3, 0, 0, 0], m: 3, nums2: [2, 5, 6], n: 3
Output: [1, 2, 2, 3, 5, 6]
Output: [1,2,2,3,5,6]
Solution
The two-pointer approach is efficient here. We start from the end of both arrays and fill `nums1` from the end. This avoids overwriting elements in `nums1` that we haven't processed yet.
Algorithm Steps
- Initialize three pointers: `p1` to `m-1`, `p2` to `n-1`, and `p` to `m+n-1`.
- While `p1` and `p2` are non-negative:
- Compare `nums1[p1]` and `nums2[p2]`.
- Place the larger element at `nums1[p]` and decrement the corresponding pointer and `p`.
- If there are remaining elements in `nums2`, copy them to the beginning of `nums1`.
Merge Sorted Array
Two Pointers Approach
Input: nums1 = [1, 2, 3, 0, 0, 0], m = 3, nums2 = [2, 5, 6], n = 3
Output: [1, 2, 3, 0, 0, 0]
Ready to start the visualization
nums1
nums2