如果按照题目要求,求出完整的数组 C ,然后排序,找到第 K 大,然而数组 C 的元素数量可以达到 2.5×10e9。所以这个方案是不可行的。
如何在不生成数组的情况下求第 K 大呢?可以利用我们曾经学习过的知识:二分答案。
通过计算: C数组中有多少个数比 mid小,来调整 mid (该调大还是调小)。
如何计算呢?考虑将两个数组排序,从小到大枚举A数组中的每一个数,在数组B中寻找有多少数与它相乘 <=mid。
这一过程可以通过二分解决,总复杂度 O(nlog(n)logm) ,其中 m 为数值范围。
进一步优化:如果利用双指针的思想代替二分,则总复杂度可以降为 O(nlogm)