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

[ACM]两个中位数

时间:2015-04-03 16:54:18      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

题目:

     
 

设X[0:n-1]和Y[0:n-1]为两个数组,每个数组中含有n个已排好序的数。试设计一个O(logn)时间算法,找出X和Y的2n个数的中位数

 

思路:

1.要求时间为O(logn),所以应该是用分治法或递归

a: 1  3  5 7 9 中位数 am=5

b: 2 4 6 8 10  中位数bm=6

因为 am< bm 所以中位数必定在 579 和246中间

再取a‘,b‘的中位数, 因为 am‘=7 ,bm‘=4  am‘>bm‘

所以中位数必定在 57 46 之间

因为只剩下 4个数, 所以 中位数是其中的四个求和.

 

2. get_Mid(int[] a , int [] b, int n){

        if(n<1): return-1

        if(n=1): return a[0]+b[0]

        else:     

                      a_med= a[] 的中位数

                      b_med= b[] 的中位数

                      if a_med<b_med{

                             get_Mid(a[a_med,n] , b[1,b_med ], int n-a_med)

                      }

                     if a_med>b_med{

                             get_Mid(a[1,a_med] , b[a_med,n ], int n-a_med)

                     }

                    if a_med=b_med{

                             return a_ med

                    }

 

    }

 

[ACM]两个中位数

标签:

原文地址:http://www.cnblogs.com/zzblee/p/4390239.html

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