B 朴素的中位数
时间限制:1000ms 内存限制:65536kb
通过率:62/80 (77.50%) 正确率:62/354 (17.51%)
解析:
将两个有序数组归并,分奇偶求出中位数即可,不过要注意:两个数组均使用long long数据类型,总数为偶数求解中位数时,要将数组中间两个数强制转化为double类型再计算才能避免出错。
代码:
#include<cstdio>
#include<algorithm>
#include<iostream>
long long num_1[1000007],num_2[1000007];
long long num[2000007];
using namespace std;
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(!n&&!m)
{
printf("0.0\n");
continue;
}
for(int i = 0;i < n;i++)
{
scanf("%lld",&num_1[i]);
}
for(int i = 0;i < m;i++)
{
scanf("%lld",&num_2[i]);
}
int i = 0,j = 0,k = 0;
while(i < n && j < m)
{
if(num_1[i] <= num_2[j])
{
num[k++] = num_1[i++];
}
else
{
num[k++] = num_2[j++];
}
}
while(i < n)
{
num[k++] = num_1[i++];
}
while(j < m)
{
num[k++] = num_2[j++];
}
int sum = n+m;
if(sum % 2 == 0)
{
double mid = ((double)num[sum/2] + (double)num[sum/2-1])/2;
printf("%.1lf\n",mid);
}
else
{
double mid = num[(sum+1)/2-1];
printf("%.1lf\n",mid);
}
}
}
探讨了如何寻找两个已排序数组的中位数,并提供了一种有效的算法实现方案。该算法首先合并两个数组,然后根据数组总长度的奇偶性来确定中位数。
1869

被折叠的 条评论
为什么被折叠?



