2019独角兽企业重金招聘Python工程师标准>>>
提供方法,直接调用,支持任意个数组的合并成一个数组,并且完成排序,每个数组元素个数不定。需要提供两个方法,分别做到时间复杂度最低、空间复杂度最低。并说明两个方法的时间复杂度和空间复杂度
面试题: 题目就这样,只能理解到这,望大家给出正确的答案。
1、时间复杂度最低 (暂时还没研究明白....)
2、空间复杂度最低 (凑合看吧)在资料书中看到的
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;}}}