两个整数递增序列A,B分别有n和m个元素,求第k大的数

//网上常见的是用归并排序的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大的数】

    推荐阅读