提供方法,直接调用,支持任意个数组的合并成一个数组,而且完成排序,每一个数组元素个数不定。须要提供两个方法,分别作到时间复杂度最低、空间复杂度最低。并说明两个方法的时间复杂度和空间复杂度java
面试题: 题目就这样,只能理解到这,望你们给出正确的答案。面试
一、时间复杂度最低 (暂时还没研究明白....)数组
二、空间复杂度最低 (凑合看吧)在资料书中看到的 指针
package lcr; public class ArrayMerge { public static void main(String[] args) { int[] a = new int[10]; a[0] = 100; a[1] = 111; a[2] = 112; int[] b = { 10, 11, 12 }; merge(a, 3, b, 3); for (int i = 0; i < a.length; i++) { System.out.println(a[i] + " "); } } /** * 空间复杂度最低 * 1.假定一个新的数组,长度为合并以后的长度 m + n * 2.比较大小,较大的日后移动,指针前移 * 3.合并以后的数组不新分配内存空间,而是利用已有的数组存放 * 4.参数在末端插入,若是数组空间没有填满,复杂度为O(1) * @param a * @param m * @param b * @param n */ public static void merge(int a[], int m, int b[], int n) { int i = m - 1; int j = n - 1; int index = m + n - 1; //假定一个新的数组,长度为合并以后的长度 m + n while (i >= 0 && j >= 0) { if (a[i] > b[j]) { //比较大小,较大的日后移动,指针前移 a[index] = a[i]; index = index - 1; i = i - 1; } else { a[index] = b[j]; index = index - 1; j = j - 1; } } while (i >= 0) { a[index] = a[i]; index = index - 1; i = i - 1; } while (j >= 0) { a[index] = b[j]; index = index - 1; j = j - 1; } } }