LeetCode Median of Two Sorted Arrays(JAVA)

There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

说白了就是在两个有序数组,找中位数。

使用两个指针指向两个数组的起始位置,根据指针所指的数字大小,确定增加哪个指针,直到找到中位数为止。而在整个解题过程中,还是发现自己很多问题没有考虑清楚。

1、未考虑其中一个数组为空的情况。

2、未考虑边界问题,有时候一个数组遍历完成后,可能还未到中位数位置。

3、两个数组各自只有一个元素的时候,一开始也未考虑到。

所以发现自己还是有很多细节未考虑清楚。

等真正通过以后,通过论坛中discussion版块中,看到别人的解题代码,觉得自己的代码还是略复杂,不够简洁。解题思路易混乱。

代码如下:

public class Solution {
    public double findMedianSortedArrays(int A[], int B[])
    {
        int m = A.length;
        int n = B.length;
        double median = 0.0;
        int k = (m+n)/2;
        int syn = (m+n)%2;
        int i=0;
        int j=0;
        if(syn == 0)
        {
            int last = 0;
            while(i<m && j<n && (i+j)<k)
            {
                if(A[i]>B[j])
                {
                    last = B[j];
                    j++;
                }
                else
                {
                    last = A[i];
                    i++;
                }
            }
            if(i+j==k)
            {
                if(i == m)
                {
                    median = ((double)last + (double)B[j])/2;
                }
                else if(j == n)
                {
                    median = ((double)last + (double)A[i])/2;
                }
                else
                {
                    int min = A[i]>B[j]?B[j]:A[i];
                    median = ((double)last + (double)min)/2;
                }
               
            }
            else if(i == m)
            {
                median = ((double)B[k -i - 1] + (double)B[k - i])/2;
            }
            else if(j == n)
            {
                median = ((double)A[k -j - 1] + (double)A[k - j])/2;
            }
        }
        else
        {
            while(i<m && j<n && (i+j)<k)
            {
                if(A[i]>B[j])
                {
                    j++;
                }
                else
                {
                    i++;
                }
            }
            if(i == m)
            {
                median = (double)B[k -i] ;
            }
            else if(j == n)
            {
                median = (double)A[k - j];
            }
            else if(i+j==k)
            {
                int min = A[i]>B[j]?B[j]:A[i];
                median = (double)min;
            }
        }
       
        return median;
    }
   
}

posted on 2014-04-24 15:30  JessiaDing  阅读(244)  评论(0)    收藏  举报