题意就是找两个升序数组合并后的中位数,
思路:假设a和b数组的大小分别是n1和n2,不进行排序,因为a和b数组本身就是排好序的,直接从小到大读a数组和b数组的元素,第(n1+n2)/2(向上取整)个元素即为所求。
#include<stdio.h>
int main()
{
int n1,n2;
scanf("%d",&n1);
long a[n1];
for(int i = 0;i<n1;i++)
scanf("%ld",&a[i]);
scanf("%d",&n2);
long b[n2];
for(int i = 0;i<n2;i++)
scanf("%ld",&b[i]);
int index = (n1+n2+1)/2; // 最终要求的中位数在合并后的数组的位置
long ans;
int i1 = 0,i2 = 0;
for(int i =0;i!=index;i++)
{
if(a[i1] < b[i2])
ans = a[i1++];
else
ans = b[i2++];
}
printf("%ld",ans);
return 0;
}
京公网安备 11010502036488号