BM87. 合并两个有序的数组
描述
示例1
输入:
[4,5,6],[1,2,3]
输出:
[1,2,3,4,5,6]
说明:
A数组为[4,5,6],B数组为[1,2,3],后台程序会预先将A扩容为[4,5,6,0,0,0],B还是为[1,2,3],m=3,n=3,传入到函数merge里面,然后请同学完成merge函数,将B的数据合并A里面,最后后台程序输出A数组示例2
输入:
[1,2,3],[2,5,6]
输出:
[1,2,2,3,5,6]
C 解法, 执行用时: 2ms, 内存消耗: 344KB, 提交时间: 2021-03-15
/** * * @param A int整型一维数组 * @param ALen int A数组长度 * @param B int整型一维数组 * @param BLen int B数组长度 * @return void */ void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here int num = n + m -1; m -= 1; n -= 1; while(n >= 0 && m >= 0) { if(A[m] > B[n]) { A[num] = A[m]; m -= 1; } else { A[num] = B[n]; n -= 1; } num -= 1; } if(m < 0) { for(int i = 0; i <= n; i++) { A[i] = B[i]; } } }
C 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2021-04-04
/** * * @param A int整型一维数组 * @param ALen int A数组长度 * @param B int整型一维数组 * @param BLen int B数组长度 * @return void */ void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here int index = m+n-1; m--; n--; while(m>=0 && n>=0) { if(A[m]>B[n]) { A[index] = A[m]; m--; index--; } else { A[index] = B[n]; n--; index--; } } while(n>=0) { A[index--] = B[n--]; } }
C 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2021-03-03
/** * * @param A int整型一维数组 * @param ALen int A数组长度 * @param B int整型一维数组 * @param BLen int B数组长度 * @return void */ void merge(int* A, int ALen, int m, int* B, int BLen, int n) { int tailA = ALen - 1; int tailB = BLen - 1; int tail = ALen + BLen - 1; while (tailA >= 0 && tailB >= 0) { A[tail--] = A[tailA] > B[tailB] ? A[tailA--] : B[tailB--]; } while (tailB >= 0) { A[tail--] = B[tailB--]; } }
C 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-03-22
/** * * @param A int整型一维数组 * @param ALen int A数组长度 * @param B int整型一维数组 * @param BLen int B数组长度 * @return void */ void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here int num; num = n + m - 1; m--; n--; while (m >= 0 && n >= 0) { if (A[m] > B[n]){ A[num] = A[m]; m--; } else { A[num] = B[n]; n--; } num--; } if (m < 0) { for (int i = 0; i <= n; i++) { A[i] = B[i]; } } }
C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2021-07-17
/** * * @param A int整型一维数组 * @param ALen int A数组长度 * @param B int整型一维数组 * @param BLen int B数组长度 * @return void */ void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here int a = m-1; int b = n-1; for(int i = m+n-1 ; i >= 0 ; i--)//需要填m+n次 { if(b<0||(a>=0&&A[a]>=B[b])) //B数组中的数全部用完了就填A数组中的数 a数组中的数没有用完,并且A数组的数大 { A[i]=A[a]; a--; } else { A[i]=B[b]; b--; } } }