1 条题解
-
0
C++ :
#include <cstdio> /* 中位数下标(0-based)= (n + m - 1) / 2,与题面「4 个数 {11,12,13,14} 中位数为 12」 (即偶数长度取下中位数)一致。归并双指针取第 k 个,O(n+m) 时间 / O(1) 空间。 */ static long long A[1000005], B[1000005]; int main(){ int n, m; if(scanf("%d", &n) != 1) return 0; for(int i = 0; i < n; i++) scanf("%lld", &A[i]); if(scanf("%d", &m) != 1) return 0; for(int i = 0; i < m; i++) scanf("%lld", &B[i]); long long k = (long long)(n + m - 1) / 2; /* 目标下标 */ long long i = 0, j = 0, cur = 0, cnt = 0; while(i < n || j < m){ if(j >= m || (i < n && A[i] <= B[j])) cur = A[i++]; else cur = B[j++]; if(cnt == k){ printf("%lld\n", cur); return 0; } cnt++; } printf("%lld\n", cur); return 0; }
- 1
信息
- ID
- 2819
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者