解题思路:
1、首先确定合并数组后数组的长度;
2、按照从后往前比较A和B两个数组中元素的大小,将较大的值赋值过去
3、如果A和B数组中其中一个数组已经全部赋值完毕,则将另一个数组剩余值从后往前依次赋值过去
(参见解法一)
因为题目中是在A数组中进行操作,所以解法一可以进行简化,得到解法二

解法一

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

        int i=m-1,j=n-1,count=m+n-1;
        while(i>=0 && j>=0){
            if(A[i]>B[j])
                A[count--]=A[i--];
            else
                A[count--]=B[j--];
        }
        while(j>=0)
            A[count--]=B[j--];
        while(i>=0)
            A[count--]=A[i--];
    }
}

6到9行可以替换成

A[count--]=A[i]>B[j] ? A[i--]:B[j--];

解法二

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

        int i=m-1,j=n-1,count=m+n-1;
        while(i>=0 && j>=0){
            A[count--]=A[i]>B[j] ? A[i--]:B[j--];
        }
        while(j>=0)
            A[count--]=B[j--];
    }
}