【牛客题霸官方题解】NC22 合并两个有序的数组

合并两个有序的数组

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

视频题解


文字题解

从后往前看,在每一个位置上选择A和B中较小的那一个

c++版本代码:


class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        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--;
            }
        }
    }
};

java版本代码:

public class Solution {
    public void merge(int A[], int m, int B[], int n) {
        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--;
            }
        }
    }
}

python版本代码:

class Solution:
    def merge(self , A, m, B, n):
        a = m-1;
        b = n-1;
        for i in range(m+n-1,-1,-1):
            if b<0 or a>=0 and A[a]>=B[b]:
            #B数组中的数全部用完了就填A数组中的数 a数组中的数没有用完,并且A数组的数大
                A[i]=A[a]
                a=a-1
            else:
                A[i]=B[b]
                b=b-1
全部评论
你好,我认为java版本第7-12行代码似乎有点缺陷。理论上来说,b数组用完后,A数组根本无须接着填充,A已然有序。
1 回复 分享
发布于 2022-12-27 21:02 重庆

相关推荐

不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
在debug的柠檬精很迷人:好消息:现在HR挑三拣四 15年后 HR跪着求要简历 坏消息:被挑的是这代人,到时候求人的也是这代人。真好。
点赞 评论 收藏
分享
评论
16
5
分享

创作者周榜

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