本文共 1537 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要找到两个严格递增整数序列的中位数,而无需将两个数组合并。这可以通过高效的指针方法来实现。
#include#include #include int main() { int l1 = 0, l2 = 0; int *a1, a2 = 0; int count = 0, mid = 0; int i = 0, j = 0; // 读取第一个数组 scanf("%d", &l1); a1 = (int*)malloc((l1 + 1) * sizeof(int)); for (int k = 0; k < l1; ++k) { scanf("%d", a1 + k); } a1[l1] = INF; // 终止符 // 读取第二个数组 scanf("%d", &l2); a2 = 0; if (l2 > 0) { scanf("%d", &a2); for (int k = 1; k < l2; ++k) { scanf("%d", a2 + k); } a2[l2] = INF; // 终止符 } // 计算中位数位置 mid = (l1 + l2 - 1) / 2; while (count < mid) { if (i < l1 && a1[i] < a2) { i++; } else { if (j < l2) { if (j == l2) { a2 = INF; // 已经读完,终止符 } j++; } } count++; } // 输出结果 int result; if (i < l1) { result = a1[i]; } else { result = a2; } printf("%d", result);}
这种方法确保了在O(n + m)的时间复杂度内解决问题,适用于大数据量的数组。
转载地址:http://sllwz.baihongyu.com/