从后往前比,因为是往nums1里面插入,所以while循环nums2而不是nums1,当循环结束,nums1就不用动了:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i=m-1;
int j=n-1;
int tail=m+n-1;
while(j>=0)
{
nums1[tail--]=(i>=0&&nums1[i]>nums2[j])?nums1[i--]:nums2[j--];
}
}
};
很笨的也过了,用一个额外的空间从前往后......
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
vector<int> nums3;
int i=0;
int j=0;
while(i!=m&&j!=n)
{
if(nums1[i]<=nums2[j])
{
nums3.push_back(nums1[i]);
i++;
}
else
{
nums3.push_back(nums2[j]);
j++;
}
}
if(i==m)
{
while(j!=n)
{
nums3.push_back(nums2[j]);
j++;
}
}
if(j==n)
{
while(i!=m)
{
nums3.push_back(nums1[i]);
i++;
}
}
nums1=nums3;
}
};