一、思路
每次比较使用ans保存两元素中的较小元素,比较 (N1 + N2 + 1)/ 2次获得第 (N1 + N2 + 1)/ 2小的元素即Median元素。
二、代码
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
int N[2], ans = 0;
vector<int> a[2];
for( int i = 0; i < 2; ++i )
{
scanf("%d", &N[i]);
a[i].resize(N[i]);
for( int j = 0; j < N[i]; ++j )
scanf("%d", &a[i][j]);
}
for( int i = 0, j = 0, k = 0; k < (N[0] + N[1] + 1) / 2; ++k )
if( (i < N[0] && j >= N[1]) || (i < N[0] && j < N[1] && a[0][i] <= a[1][j]))
ans = a[0][i++];
else ans = a[1][j++];
printf("%d", ans);
}