AcWing 1506. 中位数 双指针
原题链接
简单
作者:
jjkstra
,
2020-07-09 16:52:37
,
所有人可见
,
阅读 1413
C++ 代码
#include <iostream>
#include <vector>
using namespace std;
const int N = 2e5;
const int INF = 1e7;
vector<int> a(N), b(N);
int main()
{
ios::sync_with_stdio(false);
int n, m;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
cin >> m;
for (int i = 0; i < m; i++)
cin >> b[i];
a[n] = INF, b[m] = INF; //避免数字序列长度不一致发生越界错误
int median = n + m - 1 >> 1;
int i = 0, j = 0, cnt = 0;
while (cnt < median) //双指针寻找中位数,若a[i]<b[j],则a[i]排在前面,i++,反之b[i]排在前面,j++
{
a[i] < b[j] ? i++ : j++;
cnt++;
}
cout << (a[i] < b[j] ? a[i] : b[j]) << endl;
return 0;
}
这波避免越界的操作真的🐂