求两个数组组成的数组的中位数。要求复杂度O(log(M+N)).
思路:这个复杂度肯定要用二分,关键是怎么分。
求两个数组的中位数相当于求两个数组的第k个值问题的特例。在后者问题上,我们设短数组为array1,长数组为array2,然后对array1设一个指针i,对array2设指针j,令 j=k-i(固定短数组为array1是为了保证j不为负数),在0...m中对i进行二分取值,二分的终点是 array1[i-1]<array2[j] && array2[j-1]<array1[i] .
但是当k是本题中的中位数时,就需要考虑m+n的单复数问题。
将两个数组分别分成左右两部分。
The Left Part A0, A1, A2, ...Ai-1 | Ai, Ai+1, ... AN The Right Part
The Left Part B0, B1, B2, ...Bj-1 | Bj, Bj+1, ... BM The Right Part
二分(递归)的终点是: ①左右两部分的元素数目相同 && ②Ai-1<=Bj && ③Bi-1<=Aj ; 因为AB有序,②③可以合并为 Max(The Left Part)<=Min(The Right Part)
此时如果 M+N 是奇数,return