解法一:归并

根据两个数组长度算出中位数的位置,然后进行归并。

  1. #include <bits/stdc++.h>
  2. #define Long long long
  3. using namespace std;
  4. Long A[200005];
  5. Long B[200005];
  6. int main() {
  7. int lenA, lenB;
  8. cin >> lenA;
  9. for (int i = 0; i < lenA; ++i) {
  10. cin >> A[i];
  11. }
  12. A[lenA] = 0x7fffffffffffffff;
  13. cin >> lenB;
  14. for (int i = 0; i < lenB; ++i) {
  15. cin >> B[i];
  16. }
  17. B[lenB] = 0x7fffffffffffffff;
  18. int pos = (lenA + lenB - 1) / 2;
  19. int i = 0;
  20. int j = 0;
  21. while (pos > 0) {
  22. if (A[i] < B[j]) {
  23. ++i;
  24. } else {
  25. ++j;
  26. }
  27. --pos;
  28. }
  29. if (A[i] < B[j]) {
  30. cout << A[i] << '\n';
  31. } else {
  32. cout << B[j] << '\n';
  33. }
  34. }