目录
1,题目描述
题目大意
2,思路
3,代码
1,题目描述
Sample Input:
4 11 12 13 14
5 9 10 15 16 17
Sample Output:
13
题目大意
求两递增序列的中位数(合并之后的)。
2,思路
递增序列合并,而且只需输出中位数即可(位于(num1+num2+1)/ 2的元素)。
- 先接受第一行数据,并计算出mid;
- 逐个接受第二行数据temp。当数组1当前下标对应的元素小于temp时,就将其放入vector<int> ans中,否则将temp放入ans中。直到ans.size()达到mid时,输出ans[mid-1]。
- 若第二个数组提前遍历完毕(测试点6),遍历第一个数组的剩余元素,直到ans.size()==mid时,输出ans[mid-1]。
3,代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
//#ifdef ONLINE_JUDGE
//#else
// freopen("1.txt", "r", stdin);
//#endif
int num1, num2, index = 0, mid;
int input[200001], tem;
vector<int> ans;
scanf("%d", &num1);
for(int i = 0; i < num1; i++) scanf("%d", &input[i]);
scanf("%d", &num2);
mid = (num1 + num2 + 1) / 2; //中位数的位置
for(int i = 0; i < num2; i++){
scanf("%d", &tem);
while(index < num1 && input[index] <= tem){
ans.push_back(input[index++]);
if(ans.size() == mid){ //只要达到mid就输出
cout<<ans[mid - 1];
return 0;
}
}
ans.push_back(tem);
if(ans.size() == mid){ //只要达到mid就输出
cout<<ans[mid - 1];
return 0;
}
}
while(index < num1){ //若第二个数组已经遍历完毕 仍未到达mid
ans.push_back(input[index++]);
if(ans.size() == mid){
cout<<ans[mid - 1];
return 0;
}
}
return 0;
}
标签:25,PAT,num1,index,Median,mid,ans,input,size From: https://blog.51cto.com/u_15849465/5801389