解题思路: 本题难点在于内存限制,如果将数据全部读入,内存会超限。可以使用双针法,也可以合并两个数组然后再排序,但后者会出现内存超限。另外,在每一组数据最后可以放置一个int最大值,以防有一个数组所有值比另一个都大,导致数组访问超限。 AC:使用双针法,第二个数组数据边读边进行 #include <cstdio> #include <cstdlib> const int INF = 0x7fffffff; int main() { int l1, l2, i, j, count = 0; int *a1, a2; scanf("%d", &l1); a1 = (int *)malloc((l1 + 1) * sizeof(int)); for (i = 0; i < l1; i++) scanf("%d", a1 + i); *(a1 + l1) = INF; scanf("%d", &l2); //a2 = (int *)malloc((l2 + 1) * sizeof(int)); //for (i = 0; i < l2; i++) // scanf("%d", a2 + i); //*(a2 + l2) = INF; int mid = (l1 + l2 - 1) / 2; // l1 = mediapos i = j = 0; scanf("%d", &a2); while (count < mid) { if (*(a1 + i) < a2) i++; else { j++; if (j < l2) { scanf("%d", &a2); } else if (j == l2) a2 = INF; else break; } count++; } printf("%d\n", *(a1 + i) < a2 ? *(a1 + i) : a2); return 0; }