题目
给出两个有序的整数数组A和B,假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n,将数组B合并到数组A中,变成一个有序的数组
解题思路
数组A和数组B从后往前遍历,不需要额外分配空间,也不需要进行冗余处理,时间复杂度为O(n),空间复杂度为O(1)
编码实现
package com.company.algorithm;
import java.util.Arrays;
public class MergeArrays {
public static void main(String[] args) {
int[] A = new int[]{1, 2, 3, 0, 0, 0};
int[] B = new int[]{2, 3, 4};
System.out.println(Arrays.toString(merge(A, 3, B, 3)));
}
/**
* @param A 数组A
* @param m 数组A初始元素个数
* @param B 数组B
* @param n 数组B初始元素个数
* @return 合并后的数组A
*/
private static int[] merge(int[] A, int m, int[] B, int n) {
int i = m - 1;
int j = n - 1;
int index = m + n - 1;//合并后的最后一个元素在数组A中的位置
while (i >= 0 && j >= 0) {//数组A中的元素比数组B中的元素多时,执行完这个while循环结束
A[index--] = A[i] > B[j] ? A[i--] : B[j--];
}
while (j >= 0) {//数组B中的元素比数组A中的元素多时需要将B中剩余的元素添加到A中
A[index--] = B[j--];
}
return A;
}
}