サイズがそれぞれ m と n の 2 つの並べ替えられた配列 A と B があります。2 つの並べ替えられた配列の中央値を見つけます。全体的な実行時間の複雑さは O (log (m+n)) である必要があります。
double findMedianSortedArrays(int A[], int m, int B[], int n) {
return findMedianHelper2(A, m, B, n, max(0, (m-n)/2), min(m-1, (m+n)/2));
}
double findMedianHelper2(const int A[], const int m, const int B[], const int n, const int l, const int r) {
if (l > r) return findMedianHelper2(B, n, A, m, max(0, (n-m)/2), min(n-1, (m+n)/2));
int i = (l+r)/2;
int j = (m+n)/2-i;
assert(i >= 0 && i <= m && j >= 0 && j <= n);
int Ai_1 = ((i == 0) ? INT_MIN : A[i-1]);
int Bj_1 = ((j == 0) ? INT_MIN : B[j-1]);
int Ai = ((i == m) ? INT_MAX : A[i]);
int Bj = ((j == n) ? INT_MAX : B[j]);
if (Ai < Bj_1) return findMedianHelper2(A, m, B, n, i+1, r);
if (Ai > Bj) return findMedianHelper2(A, m, B, n, l, i-1);
if (((m+n) % 2) == 1) return A[i];
return (max(Ai_1, Bj_1) + Ai) / 2.0;
}
l = max(0, (m-n)/2)
質問: chooseとはどういう意味ですか?r = min(m-1, (m+n)/2)
ありがとうございました