牛客题霸NC22合并两个有序的数组Java题解
方法:遍历数组,依次比较
解题思路:先定义一个数组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]; } } }