Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
- The number of elements initialized in nums1 and nums2 are m and n respectively.
- You may assume that nums1 has enough space (size that is equal to m + n) to hold additional elements from nums2.
Solutions:
Since we assume that nums1 has size m+n, we can Iteratively merge nums2 from rear to the head by comparing nums1[i] and nums2[j] to get the larger one as the nums[k] element.
Note that if elements in nums2 are left when all the elements in nums1 are calculated, we need to merge these elements to nums1.
C++:
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int i=m-1;
int j=n-1;
int k = m+n-1;
while(i >=0 && j>=0)
{
if(A[i] > B[j])
A[k--] = A[i--];
else
A[k--] = B[j--];
}
while(j>=0)
A[k--] = B[j--];
}
};
// https://leetcode.com/problems/merge-sorted-array/discuss/29522/This-is-my-AC-code-may-help-you
Java:
class Solution {
public void merge(int[] A, int m, int[] B, int n) {
int k = m + n - 1;
int i = m - 1;
int j = n - 1;
while (i >= 0 && j >= 0) {
if (A[i] < B[j]) {
A[k--] = B[j--];
} else {
A[k--] = A[i--];
}
}
while (j >= 0) {
A[k--] = B[j--];
}
}
}
Python:
def merge(self, nums1, m, nums2, n):
while m > 0 and n > 0:
if nums1[m-1] >= nums2[n-1]:
nums1[m+n-1] = nums1[m-1]
m -= 1
else:
nums1[m+n-1] = nums2[n-1]
n -= 1
if n > 0:
nums1[:n] = nums2[:n]
# https://leetcode.com/problems/merge-sorted-array/discuss/29503/Beautiful-Python-Solution