LeetCode 4. Median of two sorted arrays

求两个数组组成的数组的中位数。要求复杂度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

  

posted @ 2018-06-08 13:54  Travelller  阅读(178)  评论(0编辑  收藏  举报