题解 | #合并两个有序的数组#

合并两个有序的数组

http://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665

主要思想归并排序中的合并

  1. 用两个指针和一个辅助数组
  2. p1 指向 A的第一个索引, p2 指向 B的第二个索引
  3. 然后进行比较,最终会有一个指针越界。

复杂度

  • 排序的时间复杂度: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
};
全部评论

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务