Problem4: Median of Two Sorted Arrays

来源:互联网 发布:淘宝上怎么搜迷你钢弩 编辑:程序博客网 时间:2024/06/05 14:07

刚开始做,还以为与前面一样不难,结果踩雷了,用的最原始的方法,先合并了两个有序数组为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;}}