问题描述:
- 合并两个有序升序的整数数组A和B变成一个新的数组。
- 数组A和B的长度不一致。
- 合并后的新数组也要有序。
重点:
- 数组A与B的合并
- 合并后的数组如何进行最优排序
主要考点:
- 合并数组的方式与方法
- 数组排序的方式与方法
算法逻辑:
- 使用冒泡排序及快排排序都可以完美实现需求,但这并不是我们想要的最优解
- 两个数组长度并不一致,由此我们可以考虑先混装再排序的方式
代码实现(最简代码):
public int[] mergeSortedArray(int[] A, int[] B) {
int[] result = Arrays.copyOf(A, A.length + B.length);
System.arraycopy(B, 0, result, A.length, B.length);
Arrays.sort(result);
return result;
}
代码实现(最优效率):
public int[] mergeSortedArray(int[] A, int[] B) {
int i = A.length;
int j = B.length;
int [] c = new int[i+j];
int k = i + j -1;
do{
c[k--] = A[i-1]>=B[j-1]?A[i---1]:B[j---1];
}while(i!=0&&j!=0);
do{
c[k--] = i == 0?B[j---1]:A[i---1];
}while(i!=0||j!=0);
return ans;
}