一、问题描述
略。知道是在nums1上变动。
二、思路
如果从nums1的头部开始放,就会出现nums1紧接着的第一个元素还没有nums2从头数第二个元素小的情形,这样就没有办法比较了。而从nums1的最后一个元素开始放,能够保证nums1和nums2的最后一个元素一定比彼此的倒数第二个元素大。
所以选择从nums1的最后一个位置开始放数。且该数一定是从nums1或nums2的没有用到的最后一个元素产生的。
三、代码实现
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = m+n-1;
int j = m-1;
int k = n-1;
while(i>=0)
{
if(j>=0 && k>=0)
{
if(nums1[j] > nums2[k])
{
nums1[i] = nums1[j];
--j;
}
else
{
nums1[i] = nums2[k];
--k;
}
}
else if(j >= 0)
{
nums1[i] = nums1[j];
--j;
}
else if(k >= 0)
{
nums1[i] = nums2[k];
--k;
}
--i;
}
}
};