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

合并两个有序的数组

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
};
全部评论

相关推荐

寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务