LeetCode 88. 合并两个有序数组

第一次
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int i = 0,j = 0,k = 0;
while(i<m && j< n){
if(nums1[i] <= nums2[j]) nums1[k++] = nums1[i++];
else nums1[k++] = nums2[j++];
}
while(i<m) nums1[k++] = nums1[i++];
while(j<n) nums1[k++] = nums1[j++];
}
自己根据王道代码随便写的,主观意淫,觉得可能对,结果gg了。
第二次
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int i = 0,j = 0,k = 0;
if(m == 0) nums1[k++] = nums2[j++];
else if(n == 0) nums1[k++] = nums1[i++];
else{
while(i<m && j<n){
if(nums1[i] <= nums2[j]) nums1[k++] = nums1[i++];
else nums1[k++] = nums2[j++];
}
while(i<m) nums1[k++] = nums1[i++];
while(j<n) nums1[k++] = nums1[j++];
}
}
又是自己主观乱写,没答案。
第三次
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int i = 0,j = 0,k = 0,h =0;
int sorted[m+n];
while(i<m && j<n){
if(nums1[i] <= nums2[j]) sorted[k++] = nums1[i++];
else sorted[k++] = nums2[j++];
}
while(i<m) sorted[k++] = nums1[i++];
while(j<n) sorted[k++] = nums1[j++];
for(h =0;h<m+n;h++){
nums1[h]= sorted[h];
}
}
看了答案,知道要加个辅助数组。但是while(j<n) sorted[k++] = nums1[j++];中写错了nums1,应该是第二个数组。自己通过测试用例分析,找到问题所在。前面的数都正确,就是后面的出了问题。

最后一次提交成功
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int i = 0,j = 0,k = 0,h =0;
int sorted[m+n];
while(i<m && j<n){
if(nums1[i] <= nums2[j]) sorted[k++] = nums1[i++];
else sorted[k++] = nums2[j++];
}
while(i<m) sorted[k++] = nums1[i++];
while(j<n) sorted[k++] = nums2[j++];
for(h =0;h<m+n;h++){
nums1[h]= sorted[h];
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值