1.合并之后排序O((m+n)log(m+n)),O(1)
2.新建数组,双指针,O(m+n),O(m+n)
3.无需新建数组,逆向双指针,O(m+n),O(1)
4.我想出来的方法,双指针原地插入,后移后面的项,可以做但是复杂度高,有到O(mn)级别
居然能击败100%,我也不知道咋回事了。
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
if(n == 0) return;
if(m == 0){
for(int i = 0; i < n; i++){
nums1[i] = nums2[i];
}
return;
}
int i = 0, j = 0, k = 0;
while(i < m & j < n){
if(nums1[i] <= nums2[j]){
++i;
}
else{
for(k = m-1; k >= i; k--) nums1[k+1] = nums1[k];
++m;
nums1[i++] = nums2[j++];
}
}
if(j == n) return;
while(i < nums1Size){
nums1[i++] = nums2[j++];
}
return;
}