void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
int temp = 0;
int k = 0;
for(int i = 0,j = 0;i<m&&j<n;){
if(nums1[i]<=nums2[j]){
i++;
}else{
temp = nums2[j];
nums2[j] = nums1[i];
nums1[i] = temp;
i++;
k=j;
if(k<n-1){
while( k<n-1&&nums2[k] > nums2[k+1] ){
temp = nums2[k];
nums2[k] = nums2[k+1];
nums2[k+1] = temp;
k++;
}
}
}
}
for(int i = m,j = 0;i<m+n&&j<n;i++,j++){
nums1[i] = nums2[j];
}
}
//暂时采用交换的方式,减少空间复杂度,时间复杂度应该差不多
- 部分错误7/59。
看错了,把两个数组下标弄反了
2. 部分错误17/59
考虑过,还以为可以蒙混过关呢,就是交换数组后,数组2的数组顺序变化,导致传递性无效,所以再次排序一个数就可以了
3.部分错误14/59
数组下标不可以超界比较。【三次】
最后一次还是利用短路判断原则才通过。
交换错误,把最后一次交换的值写成交换后的值了,应该是交换前的原值
- 正确,24.17/99.21
- 分析
空间复杂度很高很高,但是时间复杂度不行