您的位置:首页 > 其它

PAT-1029 Median (25)

2018-02-28 13:20 471 查看
题目大意:给定两个有序串,长为 n,m。问两者合并的中位数是哪个。
解题思路:本题采用的 类插入排序 ,用游标记录两个数组的比较前端,到达 (m+n)/2 停止。时间复杂度:O(max(n,m)) 。
题目链接:https://www.patest.cn/contests/pat-a-practise/1029#include <iostream>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
#include <cmath>
#include <cstring>
using namespace std;
long int a[1000001],b[1000001];
int main(int argc, char** argv) {
int n,m;
cin >> n;
for(int i=0;i<n;++i)
scanf("%ld",&a[i]);
cin >> m;
for(int i=0;i<m;++i)
scanf("%ld",&b[i]);
int n1 = 0,m1 = 0,cnt = 0;
long int t;
if((m+n)%2 == 1)
cnt=-1;
while(1)
{
if(n1 == n)
{
t = b[m1];
++m1;
}
else if(m1 == m)
{
t = a[n1];
++n1;
}
else if(a[n1]>b[m1])
{
t = b[m1];
++m1;
}
else
{
t = a[n1];
++n1;
}
++cnt;
if(cnt == (n+m)/2)
break;
}
printf("%ld\n",t);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: