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;
}
}
浙公网安备 33010602011771号