w****x 发帖数: 2483 | 1 我觉得我的这个解法是不是要干净些, 还是每次去1/4 part:
int GetMedian(int a[], int n, int b[], int m, int k)
{
assert(a && b);
if (n <= 0) return b[k-1];
if (m <= 0) return a[k-1];
if (k <= 1) return min(a[0], b[0]);
if (b[m/2] >= a[n/2])
{
if ((n/2 + 1 + m/2) >= k)
return GetMedian(a, n, b, m/2, k);
else
return GetMedian(a + n/2 + 1, n - (n/2 + 1), b, m, k - (n/2 + 1)
);
}
else
{
if ((m/2 + 1 + n/2) >= k)
return GetMedian(b, m, a, n/2, k);
else
return GetMedian(b + m/2 + 1, m - (m/2 + 1), a, n, k - (m/2 + 1)
);
}
} | p*****2 发帖数: 21240 | 2
这题java写很麻烦。
【在 w****x 的大作中提到】 : 我觉得我的这个解法是不是要干净些, 还是每次去1/4 part: : int GetMedian(int a[], int n, int b[], int m, int k) : { : assert(a && b); : if (n <= 0) return b[k-1]; : if (m <= 0) return a[k-1]; : if (k <= 1) return min(a[0], b[0]); : if (b[m/2] >= a[n/2]) : { : if ((n/2 + 1 + m/2) >= k)
| h********u 发帖数: 134 | |
|