题目描述
有两个大小分别为m和n的有序数组A和B。请找出这两个数组的中位数。你需要给出时间复杂度在O(log (m+n))以内的算法。
思路:
1.合并两个有序数组
2.根据有序数组的长度是奇数还是偶数来判断哪个是中位数
public class Solution {
//思路:合并两个数组,然后找到中间值。
public double findMedianSortedArrays(int A[], int B[]) {
int pa = 0;
int pb = 0;
int alength = A.length;
int blength = B.length;
int[] temp = new int[alength + blength];
int ptemp = 0;
//合并A与B两个有序数组到临时数组temp中
while(pa<alength && pb<blength) {
if(A[pa] <= B[pb]) {
temp[ptemp] = A[pa];
pa++;
} else {
temp[ptemp] = B[pb];
pb++;
}
ptemp++;
}
while(pa<alength) {
temp[ptemp] = A[pa];
pa++;
ptemp++;
}
while(pb<blength) {
temp[ptemp] = B[pb];
pb++;
ptemp++;
}
//如果数组长度为奇数,则返回下标为中间值的数组元素值;
if((alength+blength)%2 != 0) return (double)temp[(alength+blength)/2];
//如果数组长度为偶数,则返回下标在中间的两个数组元素值的平均值;
else return (temp[(alength+blength)/2]+temp[(alength+blength)/2 - 1])/2.0;
}
}