令我十分意外地是,这题竟然也曾经写过,但我却没有思路,罪该万死。
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) { //nums1Size:nums1数组的长度 //nums2Size:nums2数组的长度 int l1=m-1; int l2=n-1; int l3=m+n-1;//合并后盾num1索引 while(l1>=0&&l2>= 0)//只要有一个条件为假,就跳出循环 { if(nums1[l1]<nums2[l2]) { nums1[l3--]=nums2[l2--]; } else { nums1[l3--]=nums1[l1--]; } } //出了循环有两种情况:l1大于等于0或者l2大于等于0,不存在l1和l2同时大于等于0的情况 //只需要处理一种情况,那就是l2大于等于0,说明l2中的数据还没有完全放入num1中 while(l2>=0) { nums1[l3--]=nums2[l2--]; } //此时nums1中包含了nums2中的数据,num1为升序数组 }