提供方法,直接調用,支持任意個數組的合併成一個數組,而且完成排序,每一個數組元素個數不定。須要提供兩個方法,分別作到時間複雜度最低、空間複雜度最低。並說明兩個方法的時間複雜度和空間複雜度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; } } }