本题要特别注意内存的限制,climits头文件中包含了一些常用的不同数据类型的最大最小值,比如int的最大值INT_MAX等。
//AC,参考https://blog.csdn.net/xmj15715216140/article/details/80925186
#include <iostream>
#include <climits>
#include <queue>
using namespace std;
int main() {
queue<int> a, b;
int n, m, num, cnt = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &num);
a.push(num);
}
a.push(INT_MAX);
scanf("%d", &m);
for(int i = 0; i < m; i++)
{
scanf("%d", &num);
b.push(num);
if(cnt == (n + m - 1) / 2)
{
printf("%d", min(a.front(), b.front()));
return 0;
}
if(a.front() < b.front())
a.pop();
else
b.pop();
cnt++;
}
b.push(INT_MAX);
for(; cnt < (n + m - 1) / 2; cnt++)
{
if(a.front() < b.front())
a.pop();
else
b.pop();
}
printf("%d", min(a.front(), b.front()));
return 0;
}
//未AC
#include <stdio.h>
#include <malloc.h>
using namespace std;
int main()
{
int n, m;
scanf("%d", &n);
int *list1 = (int *)malloc(sizeof(int)*n);
for(int i = 0; i < n; i++)
scanf("%d", &list1[i]);
scanf("%d", &m);
int *list2 = (int *)malloc(sizeof(int)*m);
for(int i = 0; i < m; i++)
scanf("%d", &list2[i]);
int i = 0, j = 0, mid = 0;
if((n+m) % 2)
mid = (n+m)/2;
else
mid = (n+m)/2-1;
while(i < n && j < m)
{
if(list1[i] > list2[j])
j++;
else if(list1[i] < list2[j])
i++;
if(i + j == mid)
break;
}
int ans = 0;
if(i+j == mid)
{
ans = list1[i] > list2[j] ? list2[j]:list1[i];
printf("%d\n", ans);
}
else
{
if(i < n)
ans = list1[i+mid-(i+j)];
if(j < m)
ans = list2[j+mid-(i+j)];
printf("%d\n", ans);
}
return 0;
}