解法一:把nums2加到nums1尾部,然后对nums1进行排序。时间复杂度O(logn)>
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i,j;
for(i = m,j = 0;i < nums1.size() && j < nums2.size();i++,j++) nums1[i] = nums2[j];
sort(nums1.begin(),nums1.end());
}
};
解法二:从两个数组的尾部开始比较,较大的加到nums1尾部。时间复杂度O(m)
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = m-1,j = n-1,k = m+n-1;
while(i >= 0 && j >= 0)
{
if(nums1[i] > nums2[j]) nums1[k--] = nums1[i--];
else nums1[k--] = nums2[j--];
}
while(j >= 0)
{
nums1[k--] = nums2[j--];
}
}
};
原文:https://www.cnblogs.com/multhree/p/10473877.html