题目:
设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
}
}
时间: 2024-10-22 12:56:20