问题:设X[0:n-1]和Y[0:n-1]为两个数组,每个数组中含有n个已排好序的数。试设计一个O(logn)时间算法,找出X和Y的2n个数的中位数并输出。
问题分析:本来可以很简单的排序(O(n))输出中间两个数的,但是题目要求复杂度要O(logn),就有点麻烦了。主要就是对两个数组不断进行删除裁剪(这里说的删除裁剪并不是真的对数组元素进行删除,只是进行范围的缩小),直到X数组和Y数组只剩下两个元素,然后对这四个元素进行比较选出中位数。
具体方法:new两个数组X[]和Y[],然后用两个for循环进行初始化,接着用while循环进行缩小范围的操作,直到X和Y数组都只剩下两个元素。
while循环的内部操作:1判断X数组和Y数组是否只有两个元素,如果是的话,比较X[xleft]和Y[yleft]的大小,取大者为第一个中位数;然后比较X[xright]和Y[yright]的大小,取小的作为第二个中位数。