归并有序数组

合并两个有序的数组

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

照例记录下思路。

依然双指针,要求归并至 A 数组,考虑逆向归并,比较 A、B 尾部元素,大的从 A 数组索引 (A.length + B.length - 1) 开始逆向放置。最后刚好排满。

public void merge(int A[], int m, int B[], int n) {

    int aPtr = m - 1, bPtr = n - 1;
//  两数组元素从右至左比较,大的去 A 尾部,直至有一方指针到头为止
    for (int ptr = m + n - 1; aPtr >= 0 && bPtr >= 0; ptr--){
        A[ptr] = A[aPtr] > B[bPtr] ? A[aPtr--] : B[bPtr--];
    }
//  A 指针先走完的情况,B 中剩余元素直接copy至 A 对应位置即可;
    while (bPtr >= 0){
        A[bPtr] = B[bPtr--];
    }

}
全部评论
数组越界
1 回复 分享
发布于 2021-03-16 18:59
特殊情况的处理:A指针先走完。为啥不考虑B指针先走完的情况呢??难道不会出现这种情况吗??
点赞 回复 分享
发布于 2021-06-19 11:51
不太优雅
点赞 回复 分享
发布于 2021-03-22 22:56
while (bPtr >= 0){ A[bPtr] = B[bPtr--]; } 这里存在问题,B[bPtr--]执行后bPtr的值-1了 while (bPtr >= 0){ A[bPtr] = B[bPtr]; bPtr--; }
点赞 回复 分享
发布于 2021-03-13 16:06
运行超时啊,不知道为什么。。。
点赞 回复 分享
发布于 2021-01-24 22:53

相关推荐

不愿透露姓名的神秘牛友
07-03 17:37
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 10:39
一个证都没 我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
兄弟们,实习都是在接各种api,该怎么包装简历
仁者伍敌:感觉我自己做小项目也是各种api啊,我要怎么包装简历
点赞 评论 收藏
分享
评论
23
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务