今天与人讨论问题,发现一个很有意思的题目:给定两个有序的整型数组,要求在最优的情况下找到两个数组元素求和后的第K大的值。
1、刚开始遇到这个问题,我直观的想法就是分配一个数组保存两个数组元素的和,然后利用找有序数组中第K大元素的方法进行求解。然后分析了一下时间和空间复杂度,假设原始的两个有序数组分别为A和B,对应的长度为m和n,那么A和B中元素和就有m*n个,即我们需要分配一个新的数组C[m*n]保存对应的元素和,填满C数组的时间开销为O(m*n),然后在C中找第K大的元素,最快的时间复杂度为线性的,所以该方案的时间复杂度为O(m*n),空间复杂度为O(m*n)。
如果m和n很大时,时间复杂度与空间复杂度都会很大,那么我们能不能进行优化呢?一般我们求解一个数组中的元素都会采用“二分”的方法,那么我们这个题目能不能采用这种策略呢?
2、答案是肯定的。因为A和B是两个有序数组,所以A[0]+B[0]会是所有和的最小值,不妨记为min,同时,A[m-1]+B[n-1]对应所有和的最大值,不妨记为max,那么我们要求的第K大值肯定在[min, max]区间中,我们不妨设第K大的值为C[K]</