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.
题目: 两个排序数组的前m与n个元素合并,并且结果放在第一个数组上。且第一个数组有足够大的空间放置。
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.
题目: 两个排序数组的前m与n个元素合并,并且结果放在第一个数组上。且第一个数组有足够大的空间放置。
方法:从后往前放置。那个大就放哪个。
时间复杂度:O(m + n)
空间复杂度:O(1)
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
int i = m - 1, j = n - 1, tobeinput = m + n - 1;
while (tobeinput >= 0)
{
if (i < 0 && j >= 0)
{
nums1[tobeinput--] = nums2[j--];
}
else if (i >= 0 && j < 0)
{
nums1[tobeinput--] = nums1[i--];
}
else if (nums1[i] <= nums2[j])
{
nums1[tobeinput--] = nums2[j--];
}
else if (nums1[i] > nums2[j])
{
nums1[tobeinput--] = nums1[i--];
}
}
}
};