C++ 代码优化:求解两个升序序列的中位数
#include
void Input(int a[], int n) { // 读入序列 for (int i = 0; i < n; i++) cin >> a[i]; }
int Search_Mid(int A[], int B[], int n) { // 求解两个升序序列的中位数 int i = 0, j = 0, k = 0, C[2*n]; while (i < n && j < n) { if (A[i] < B[j]) C[k++] = A[i++]; else C[k++] = B[j++]; } while (i < n) C[k++] = A[i++]; while (j < n) C[k++] = B[j++]; return C[n-1]; }
int main() { int n; while (cin >> n) { if (n == 0) break; int A[n], B[n]; Input(A, n); Input(B, n); cout << Search_Mid(A, B, n) << endl; } return 0; }
这段代码实现了求解两个升序序列的中位数的功能,以下是代码的优化说明:
- 数组大小问题: 原代码中,数组A和B的大小固定为6,无法满足输入n超过6的情况。修改后的代码使用动态数组,数组大小根据输入的n动态调整,解决了这个问题。
- 返回值问题: 原代码返回C[n],但C数组的大小是2*n,应该返回C[n-1]。修改后的代码返回C[n-1],确保返回正确的中位数。
- 剩余元素问题: 原代码中,如果A和B数组中有一个已经全部遍历完,但另一个数组还有元素,C数组并没有将剩余元素加入到其中,导致错误。修改后的代码添加了两个循环,将剩余元素也加入到C数组中,确保C数组包含所有元素。
修改后的代码解决了上述问题,能够正确地求解两个升序序列的中位数。
原文地址: https://www.cveoy.top/t/topic/mXfn 著作权归作者所有。请勿转载和采集!