刚开始做,还以为与前面一样不难,结果踩雷了,用的最原始的方法,先合并了两个有序数组为1个有序数组,然后返回中间值,后面学到优化的算法再回来补充!用最原始的方法,一开始会出现访问越界的情况,是因为没有考虑清楚如果有一个数组为空时的情况!特此记录一下,采用一般方法时,一定要注意考虑边界情况!
class Solution { public double findMedianSortedArrays(int[] A, int[] B) { int m=A.length,n=B.length; if(m==0&&n!=0){ if(n%2==1){ if(n==1) return B[0]; else return B[n/2]; }else{ return (B[n/2]+B[n/2-1])/2.0; } }else if(m!=0&&n==0){ if(m%2==1){ if(m==1) return A[0]; else return A[m/2]; }else{ return (A[m/2]+A[m/2-1])/2.0; } }else{ int[] com=combine(A,B); if(com.length%2==1){ return com[com.length/2]; }else{ return (com[com.length/2]+com[com.length/2-1])/2.0; } } } public int[] combine(int[] A,int[] B){ int tol=A.length+B.length; int[] fin=new int[tol]; int flag=0,i=0,j=0; for(;i<A.length&&j<B.length;){ if(A[i]<=B[j]){ fin[flag]=A[i]; flag++; i++; }else if(A[i]>B[j]){ fin[flag]=B[j]; flag++; j++; } } for(;i<A.length;){ fin[flag]=A[i]; flag++; i++; } for(;j<B.length;){ fin[flag]=B[j]; flag++; j++; } return fin; } }