//网上常见的是用归并排序的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大的数】
推荐阅读
- 学习笔记|uni-app开发小程序
- java计算文本MD5值
- Android圆形进度条控件-CircleSeekBar
- 学习笔记|安卓中一些界面过场动画的实现
- MongoDB-存储
- 学习笔记|Burnside引理和polay计数学习笔记
- Python|【网易2019年秋招笔试题】编程题第二题(香槟塔里倒香槟——参考代码和编程思路)
- Android|安装APP损坏,出现[INSTALL_FAILED_DEXOPT]的解决办法
- Android|java日期格式化
- Android|android 读取json数据(遍历JSONObject和JSONArray