题解 | #合并两个有序的数组#
合并两个有序的数组
http://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665
主要思想归并排序中的合并
- 用两个指针和一个辅助数组
- p1 指向 A的第一个索引, p2 指向 B的第二个索引
- 然后进行比较,最终会有一个指针越界。
复杂度
- 排序的时间复杂度:O(n+m)
- 空间复杂度:O(n+m)
/**
*
* @param A int整型一维数组
* @param B int整型一维数组
* @return void
*/
function merge( A, m, B, n ) {
// write code here
let help = new Array(m+n)
let i = 0,
p1 = 0,
p2 = 0;
while(p1 <= m-1 && p2 <= n -1) {
help[i++] = A[p1] < B[p2] ? A[p1++] : B[p2++]
}
// p1, p2两个必须且只有一个越界
while(p1 <= m - 1) {
help[i++] = A[p1++]
}
while(p2 <= n - 1) {
help[i++] = B[p2++]
}
for(i = 0; i < m+n; i++) {
A[i] = help[i]
}
return A
}
module.exports = {
merge : merge
};