事件复杂度O(log(k) )
在网上看的,和同学商讨过,可行,认为此方法比上个log(m)+log(n)的方法要好
第一个数组m个元素
第二个数组n个元素
分别从两个数组找第k/2个数,a[k/2],b[k/2];
假设a[k/2]<b[k/2]; 则a[k/2] 之前的以及a[k/2]都可以删去,并且k=k -- 删去的元素
下面分析为什么可以删去:
因为a[k/2]<b[k/2],所以a[k/2]前至少有k/2-1个元素,至多有k/2-1 + k/2-1 =k-2 个元素,因为a[k/2] and b[k/2] 之后的都不可能在a[k/2] 之前,所以a[k/2]排在最后时也排在第k-1个位置,都小于第k个元素,所以可删去。
其他情况同理;
当m或n小于k/2时,假设m<k/2 令第一个数组中的最后一个元素代替上面的a[k/2], 道理同上面一样。
这样每次k都减半,直到k等于1时,从比较两个数组头 中
比较小的就是所求。