详细见:leetcode.com/problems/merge-sorted-array
Java Solution: github
package leetcode;
/*
* Given two sorted integer arrays nums1 and nums2,
* merge nums2 into nums1 as one sorted array.
Note:
You may assume that nums1 has enough space
(size that is greater or equal to m + n)
to hold additional elements from nums2.
The number of elements initialized in nums1 and nums2
are m and n respectively.
*/
public class P088_MergeSortedArray {
public static void main(String[] args) {
}
/*
* 1 ms
* 7.98%
*/
static class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
if (nums1 == null || nums2 == null || nums2.length == 0 || n == 0)
return;
int eni1 = m - 1, eni2 = n - 1, eni3 = m + n - 1;
while (eni1 != -1 && eni2 != -1)
nums1[eni3 --] = nums1[eni1] < nums2[eni2] ? nums2[eni2 --] : nums1[eni1 --];
if (eni1 != -1 && eni3 != eni1) {
while (eni1 != -1)
nums1[eni3 --] = nums1[eni1 --];
}
if (eni2 != -1) {
while (eni2 != -1)
nums1[eni3 --] = nums2[eni2 --];
}
}
}
}
C Solution: github
/*
url: leetcode.com/problems/merge-sorted-array
AC 3ms 21.00%
*/
void merge(int* n1, int n1n, int* n2, int n2n) {
int i1 = n1n -1, i2 = n2n - 1, i = n1n+n2n-1;
while (i1 > -1 && i2 > -1) {
if (n1[i1] > n2[i2]) {
n1[i --] = n1[i1 --];
} else {
n1[i --] = n2[i2 --];
}
}
while (i1 > -1) n1[i --] = n1[i1 --];
while (i2 > -1) n1[i --] = n2[i2 --];
}
Python Solution: github
#coding=utf-8
'''
url: leetcode.com/problems/merge-sorted-array
@author: zxwtry
@email: zxwtry@qq.com
@date: 2017年4月22日
@details: Solution: 52ms 46.81%
'''
class Solution(object):
def merge(self, n1, m, n2, n):
"""
:type n1: List[int]
:type m: int
:type n2: List[int]
:type n: int
:rtype: void Do not return anything, modify n1 in-place instead.
"""
i1, i2, i = m-1, n-1, m+n-1
while i1 > -1 and i2 > -1:
if n1[i1] > n2[i2]:
n1[i] = n1[i1]
i, i1 = i-1, i1-1
else:
n1[i] = n2[i2]
i, i2 = i-1, i2-1
while i1 > -1:
n1[i] = n1[i1]
i, i1 = i-1, i1-1
while i2 > -1:
n1[i] = n2[i2]
i, i2 = i-1, i2-1