#include <iostream>
#include <vector>
using namespace std;
/*
【2011统考真题】42
一个长度为L(L>=1)的升序序列 S,处在第⌈ L/2 ⌉个位置的数称为 S 的中位数。
例如,若序列S(1)=(11,13,15,17,19),则S(1)的中位数是15,
两个序列的中位数是含它们所有元素的升序序列的中位数。
例如,若S(2)=(2,4,6,8,20),则S(1)和S(2)的中位数是11。
现在有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,
找出两个序列A和B的中位数。
要求:
1) 给出算法的基本设计思想。
2) 根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
3) 说明你所设计算法的时间复杂度和空间复杂度。
*/
/*
11 13 15 17 19
2 4 6 8 20
2 4 6 8 11 13 15 17 19 20
*/
int mid_num(vector<int> a, vector<int> b)
{
int l = a.size(), i = 0, j = 0;
int mid = 0, count = 0;
while (i < l && j < l)
{
if (a[i] < b[j])
{
count++;
if (count == l)
mid = a[i];
i++;
}
else
{
count++;
if (count == l)
mid = b[j];
j++;
}
if (count >= l)
return mid;
}
return 0;
}
int main()
{
vector<int> a = {11, 13, 15, 17, 19};
vector<int> b = {2, 4, 6, 8, 20};
int ret = mid_num(a, b);
cout << "mid number = " << ret << endl;
return 0;
}