解题思路:
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--]; } }