【牛客题霸官方题解】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 重庆

相关推荐

把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
16 4 评论
分享
牛客网
牛客企业服务