参考https://github.com/liushiliushi/leetcode/blob/master/problems/88.merge-sorted-array.md
链接
思路
以前做过链表合并的问题,记得很麻烦的。
python
第一版
很容易想到用python来做,直接将两个数组先合并再排序
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
nums1[m:] = []
nums1.extend(nums2)
nums1.sort()
第二版
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
while n > 0 and m > 0:
if nums1[m - 1] <= nums2[n - 1]:
nums1[m + n - 1] = nums2[n - 1]
n -= 1
else:
nums1[m + n - 1] = nums1[m - 1]
m -= 1
if n > 0:
nums1[:n] = nums2[:n]
c
第一版
把第二个数组中的元素插到第一个里面,每次作比较。
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int j = m - 1;
int i = n - 1;
int k = m + n - 1;
while(i >= 0 )
{
//被插入的为空
if(j < 0)
{
while(i >= 0)
{
nums1[k] = nums2[i];
k--;
i--;
}
}
else
{
if(nums2[i] >= nums1[j])
{
nums1[k] = nums2[i];
i--;
k--;
}
else
{
nums1[k] = nums1[j];
j--;
k--;
}
}
}
}
还不错?哈哈