问题描述
有两个排序的数组,长度都为n,求合并后的排序数组的中位数.
直接遍历法,时间复杂度为O(n)
算法思想: 因为两个数组的长度都为n,那么合并后的中位数一定有两个,那么,我们只要在两个数组合并后的数组中找到找到第n个和第n-1个元素加起来除2就能得到其中位数。 (当然,我们不会真正的去合并两个数组).
#include<iostream>
#include<iomanip>
using namespace std;
double getmedian(int *a,int *b,int n)
{
int count=0;
int i=0,j=0;
double mid;
while(count < n-1){ //循环找到合并后中间的两个中位数在两个数组中对应的下标.
if(a[i]<b[j]){
i++;
count++;
}else{
j++;
count++;
}
}
return (a[i]+b[i])/2.0;
}
int mai