给定的X数组和Y数组都是n个元素的有序数组,设计一个O(logn)时间的算法,找出X和Y的2n个数的中位数。(第n小的数) 这个题一看就要用二分的思想来做,下面的代码套用二分的思路,大家一定不陌生。 bool GetValue(int *X,int *Y,int n,int& value) { int low = 0 , high = n - 1 , mid; while(low <= high){ mid = (low + high) / 2; if(mid == n - 1){ if(X[mid] <= Y[0]){ value = X[mid]; return true; } } else { if(X[mid] <= Y[n - mid - 1] && X[mid] >= Y[n - mid - 2]){ value = X[mid]; return true; } } } } void GetMiddle(int *X,int *Y,int n) { int value; // 这个中位数不是在 X 中就是在 Y 中 if(GetValue(X,Y,n,value) == false){ GetValue(Y,X,n,value); } }