来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m +
n,这样它就有足够的空间保存来自 nums2 的元素。
示例 1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]示例 2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0 输出:[1]
解法一:
将nums2的元素拷贝到nums1中,然后再对nums1中的元素进行从小到大排序。
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
int i = m, j = 0;
while (i < m + n && j < n)
{
nums1[i++] = nums2[j++];
}
sort(nums1.begin(), nums1.end());
}
解法二:
思路如下图所示:注意是从后往前拷贝
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
int len = m + n - 1;
int i = m - 1;
int j = n - 1;
while (i >= 0 && j >= 0)
{
nums1[len--] = nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
}
//将nums2中的剩余元素拷贝
for (i = j; i >= 0; i--)
{
nums1[len--] = nums2[i];
}
}