從後往前比,因爲是往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;
}
};