码迷,mamicode.com
首页 > 其他好文 > 详细

Median

时间:2015-09-07 22:42:38      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

这种方法感觉有点难懂

 1 #include "stdafx.h"
 2 #include <iostream>
 3 #include   <vector>
 4 using namespace std;
 5 
 6 class Solution{
 7 public:
 8     double findMedianSortedArrays(int A[],int m, int B[],int n){
 9     if(m>n) findMedianSortedArrays(B,n,A,m);
10     int minidx=0,maxidx=m,i,j,num1,mid=(m+n+1)>>1,num2;
11     while(minidx<=maxidx)
12     {
13         i=(minidx+maxidx)>>1;
14         j=mid-i;
15         if(i<m&&j>0&&B[j-1]>A[i])minidx=i+1;  //取前面部分,如果B[j-1]>A[i],说明A[i]个肯定不含中位数,且中位数只会在A[i-1]的后面,因为B[j-1]多了大于的数,但总中位数的排序却不变
16         else if(i>0&&j<n&&A[i-1]>B[j])maxidx=i-1;   
17         else {
18         if(i==0)num1=B[j-1];
19         else if (j==0)num1=A[i-1];    //i,j 不可能取满
20         else num1=max(A[i-1],B[j-1]);  //可能A[i]=B[j-1]和A[i-1]=B[j]
21         break;
22         }
23 
24     }
25     if((m+n)&1)return num1;
26     if(i==m)num2=B[j];
27     else if(j==n)num2=A[i];
else num2 = min(A[i],B[j]); //偶数情况
28 return (num1+num2)/2; 29 30 } 31 32 }; 33 34 int _tmain(int argc, _TCHAR* argv[]) 35 { 36 Solution a; 37 int m,n,x; 38 int A[50],B[50]; 39 cin>>m; 40 for(int i=0;i<m;i++){ 41 cin>>x; 42 A[i]=x; 43 } 44 cin>>n; 45 for(int i=0;i<m;i++){ 46 cin>>x; 47 B[i]=x; 48 } 49 50 51 cout<<a.findMedianSortedArrays(A,m,B,n); 52 53 54 system("pause"); 55 return 0; 56 57 58 }

第二种方法及其巧妙,尤其对数组偶数与奇数的处理

 

 

 1 class Solution{
 2 public:
 3 double findMedianSortedArrays(int A[],int m,int B[],int n){
 4 int total =m+n;
 5 if(total &0x1)
 6 return find_kth(A,m,B,n,total/2+1);
 7 else 
 8    return (find_kth(A,m,B,n,total/2)+find_kth(A,m,B,n,total/2+1))/2.0;
 9 }
10 private:
11   static int find_kth(int A[],int m,int B[],int n,int k);
12 {
13 if(m>n)return find_kth(B,n,A,m,k);
14 if(m==0)return B[k-1];
15 if(k==1)return min(A[0],B[0]);
16 int ia=min(k/2,m),ib=k-ia;
17 if(A[ia-1]<B[ib-1])
18   return find_kth(A+ia,m-ia,B,n,k-ia);
19  else if(A[ia-1]>B[ib-1])
20 return find_kth(A,m,B+ib,n-ib,k-ib);
21  else 
22   return A[ia-1];
23 }
24 }

 

Median

标签:

原文地址:http://www.cnblogs.com/daocaorenblog/p/4790012.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!