4. Median of Two Sorted Arrays
Posted zhuangbijingdeboke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4. Median of Two Sorted Arrays相关的知识,希望对你有一定的参考价值。
1 static int wing=[]() 2 { 3 std::ios::sync_with_stdio(false); 4 cin.tie(NULL); 5 return 0; 6 }(); 7 8 class Solution 9 { 10 public: 11 double findMedianSortedArrays(vector<int>& A, vector<int>& B) 12 { 13 int m=A.size(),n=B.size(); 14 if(m>n) 15 { 16 swap(A,B); 17 swap(m,n); 18 } 19 if(n==0) 20 return -1.0; 21 int imin=0,imax=m,half_len=(m+n+1)/2; 22 while(imin<=imax) 23 { 24 int i=(imin+imax)/2; 25 int j=half_len-i; 26 if(i<m&&B[j-1]>A[i]) 27 imin=i+1; 28 else if(i>0&&A[i-1]>B[j]) 29 imax=i-1; 30 else 31 { 32 int max_of_left=0; 33 if(i==0) 34 max_of_left=B[j-1]; 35 else if(j==0) 36 max_of_left=A[i-1]; 37 else 38 max_of_left=max(A[i-1],B[j-1]); 39 40 if((m+n)%2==1) 41 return max_of_left; 42 43 int min_of_right=0; 44 if(i==m) 45 min_of_right=B[j]; 46 else if(j==n) 47 min_of_right=A[i]; 48 else 49 min_of_right=min(A[i],B[j]); 50 return (max_of_left+min_of_right)/2.0; 51 } 52 } 53 } 54 };
本质就是对较短数组进行二分查找,找到一个下标 i ,使得 i 和其对应的较长数组中的 j 满足以下条件:
1、i + j = (m + n + 1 )/ 2
2、左侧最大元素小于右侧最小元素
此时,若全部元素数量为奇数,则左侧最大元素为中位数
若全部元素数量为偶数,则左侧最大和右侧最小的均值为中位数
以上是关于4. Median of Two Sorted Arrays的主要内容,如果未能解决你的问题,请参考以下文章
leetcode-4 Median of Two Sorted Arrays
4. Median of Two Sorted Arrays