递归合并两个已按升序排列的数组 发表于 2019-12-05 | 分类于 面试题 我这个人,一般现场做或者线上做面试题,表现都很差,但是給我一个IDE,我就起飞了,面向IDE编程的选手。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364package com.alonelaval.java.leetcode;import java.util.Arrays;/** * @author huawei * @create 2019-11-28 **/public class Code2 { /** * 递归合并两个已按升序排列的数组. * * <p> * 提示: * 1. 必须使用递归写法,循环写法无效。 * 2. 可以定义辅助函数。 * 3. test case执行时可能出现StackOverFlowError。 * </p> * * @param a 升序排列数组,长度可能为0-10000 * @param b 升序排列数组,长度可能为0-10000 * @return a和b合并后的升序排列数组 */ public static int[] merge(int[] a, int[] b) { if(a == null || b== null){ return a==null ? b :a; } int [] result = new int[a.length+b.length]; return merge(a,b,0,0,result,0); } public static int[] merge(int []a,int [] b,int aIndex,int bIndex,int []result,int resultIndex){ if(result.length ==resultIndex){ return result; } if(aIndex == a.length){ result[resultIndex++]=b[bIndex++]; return merge(a,b,aIndex,bIndex,result,resultIndex); } if(bIndex == b.length){ result[resultIndex++]=a[aIndex++]; return merge(a,b,aIndex,bIndex,result,resultIndex); } if(a[aIndex] == b[bIndex]){ result[resultIndex++] = a[aIndex++]; result[resultIndex++] = b[bIndex++]; } else if (a[aIndex] < b[bIndex]) { result[resultIndex++] = a[aIndex++]; } else if (a[aIndex] > b[bIndex]) { result[resultIndex++] = b[bIndex++]; } return merge(a,b,aIndex,bIndex,result,resultIndex); } public static void main(String[] args) { int a []= new int[]{1,3,5,12,12,12,12}; int b []= new int[]{2,4,62,90}; System.out.println(Arrays.toString(merge(a,b))); }}