解题思路:
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--];
}
}
京公网安备 11010502036488号