//网上常见的是用归并排序的merge函数做,没能考虑到去除重复元素的问题。
我的思路:遍历数组a和b,挑选较小者入数组c,中间注意去重。然后输出c的第len-k个位置上的元素即为第k大
void findKElem(int a[], int b[], int n, int m, int k)
{
int i = 0, j = 0, s = 0;
int c[n + m];
//为了去重,先处理下标为0的元素
if (a[0] <= b[0])
{
c[0] = a[0];
s++;
i++;
}
else
{
c[0] = b[0];
s++;
j++;
}
while (i < n || j < m)
{
if (a[i] <= b[j])
{
if (a[i] != c[s - 1]) //去重复,否则有可能造成a[5] = {1, 2, 3, 4, 5}; b[5] = {1, 3, 5, 6, 9};1 1 2 3 3 4 5 5 6 9,第四大是5,但其实是4
c[s++] = a[i];
i++;
}
else
{
if (b[j] != c[s - 1])
c[s++] = b[j];
j++;
}
}
cout << c[s - k];//注意第一大位于s-1,第二大位于s-2...第k大位于s-k。(s是数组c的长度)
}
两个整数递增序列A,B分别有n和m个元素,求第k大的数
猜你喜欢
转载自blog.csdn.net/qq_36626914/article/details/106867880
今日推荐
周排行