double findkth(int a[], int n, int b[], int m, int k)
{
if(m > n)
return findkth(b, m, a, n, k);
if(m == 0)
return a[k - 1];
if(k == 1)
return a[0] < b[0] ? a[0]: b[0];
int pb = (k + 1) / 2 < m ? (k + 1) / 2 : m, pa = k - pb;
if(a[pa - 1] < b[pb - 1])
return findkth(a + pa, n - pa, b, m, k - pa);
else if(a[pa - 1] > b[pb - 1])
return findkth(a, n, b + pb, m - pb, k - pb);
else return a[pa - 1];
}
在两个有序数组中找第k大
最新推荐文章于 2020-03-26 19:42:29 发布