![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1211fed4e3aa6d8861f7229860817e46.png)
题目大意
给出两个已排序序列,求这两个序列合并后的中间数
思路解析
过程类似于归并排序中最后的归并过程,只是不用将数据复制到结果数组里罢了。用count初始化为-1,记录当前到了哪个下标,每得到一个归并数count就自增,直到count == (n + m - 1) / 2,输出当前要归并的这个值,不要忘了处理最后剩余的元素,然后结束程序。
示例代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n,m;
scanf("%d", &n);
vector<int> vec1(n);
for (int i = 0; i < n; i++)
scanf("%d", &vec1[i]);
scanf("%d", &m);
int mid = (n + m - 1) / 2;
int j = 0;
int count = -1;
for (int i = 0; i < m; i++) {
int temp;
scanf("%d", &temp);
while (j != n && vec1[j] <= temp) {
count++;
if (count == mid)
printf("%d", vec1[j]); return 0;
j++;
}
count++;
if (count == mid)
printf("%d", temp); return 0;
}
while (j != n) {
count++;
if (count == mid)
printf("%d", vec1[j]); return 0;
j++;
}
return 0;
}