牛客题霸NC22合并两个有序的数组Java题解

牛客题霸NC22合并两个有序的数组Java题解

https://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665?tpId=117&&tqId=34943&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking

方法:遍历数组,依次比较
解题思路:先定义一个数组res用来存放A和B中的元素。遍历数组A、B中元素,如果A[i]<=B[j]则将A的元素加入res中,如果A[i]>B[j]则将B的元素加入res中。如果A,B其中有一个遍历完,另一个没遍历完,则将未遍历完的数组中的元素全部加入res中,最后再将res中的数据存入数组A中。

public class Solution {
    public void merge(int A[], int m, int B[], int n) {
        int[] res = new int[m+n];  
        int i=0,j=0,r=0;
        while(i<m && j<n){      //遍历A.B中的元素
            if(A[i]<=B[j]){    //如果A<=B,A先放
                res[r++] = A[i++];
            }else{             //如果A>B,B先放
                res[r++] = B[j++];
            }
        }
        //如果A,B其中有一个遍历完,另一个没遍历完,则将未遍历完的数组中的元素全部加入res中
        while(i<m){     //当A中的元素未遍历完时,将A中剩下的元素全部放入res中
            res[r++]=A[i++];
        }
        while(j<n){     //当B中的元素未遍历完时,将B中剩下的元素全部放入res中
            res[r++]=B[j++];
        }
        for(int k=0;k<res.length;k++){ //最后将数组res中的元素全部存入数组A中
            A[k]=res[k];
        }
    }
}

 

posted @ 2020-11-25 14:58  云飞扬°  阅读(101)  评论(0编辑  收藏  举报