/*
Find the k-th Smallest Element in the Union of Two Sorted Arrays
*/
#include <iostream>
int findKth(int a[], int m, int b[], int n, int k)
{
int pa = m / (m + n) * k;
int pb = k - pa - 1;
int a_pa_1 = (pa == 0) ? INT_MIN : a[pa - 1];
int b_pb_1 = (pb == 0) ? INT_MIN : b[pb - 1];
int a_pa = (pa == m) ? INT_MAX : a[pa];
int b_pb = (pb == n) ? INT_MAX : b[pb];
if(a_pa > b_pb && a_pa_1 < b_pb) return b_pb;
if(b_pb > a_pa && b_pb_1 < a_pa) return a_pa;
if(a_pa > b_pb)
{
return findKth(a, pa, b + pb + 1, n - pb - 1, k - pb - 1);
}
else
{
return findKth(a + pa + 1, m - pa - 1, b, pb, k - pa - 1);
}
};
int main()
{
int A[] = {1, 8, 8, 10, 20};
int B[] = {5, 8, 8, 9, 22, 110};
int k = 7;
int res = findKth(A, 5, B, 6, k);
return 0;
}在2个排序数组内找到第K小的元素
最新推荐文章于 2021-03-23 10:59:28 发布
本文介绍了一个算法,该算法能够在两个已排序的整数数组中找到第K小的元素。通过递归地缩小搜索范围,有效地解决了这个问题。文章提供了一个C++实现示例。
379

被折叠的 条评论
为什么被折叠?



