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

Median of Two Sorted Arrays

时间:2015-03-14 21:40:42      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

思路简单,就是写起来比较麻烦。

几个注意点:

1,其中一个数组为空的情况

2,两个数组的排列顺序,从大到小或者从小到大

3,其中一个数组全在中位数(median)之前的情况

4,奇偶数的讨论。

 1 class Solution {
 2 public:
 3     double findMedianSortedArrays(int A[], int m, int B[], int n) {
 4     if(!m)
 5     {
 6         if(n%2)
 7             return (double)B[n/2];
 8         else
 9             return (double)(B[n/2]+B[n/2-1])/2;
10     }
11     if(!n)
12     {
13         if(m%2)
14             return (double)A[m/2];
15         else
16             return (double)(A[m/2]+A[m/2-1])/2;
17     }
18     bool aSort = true;
19     bool bSort = true;
20     int i = 0;
21     int j = 0;
22     if (A[0] > A[m-1]){
23         i = m-1;
24         aSort = false;
25     }
26     if (B[0] > B[n-1]){
27         j = n-1;
28         bSort = false;
29     }
30     int middle;
31     int flag = 0;
32     while(flag < (m+n+1)/2)
33     {
34         if(i<0 || i>m-1)
35         {
36             middle = B[j];
37             iterat(bSort,&j);
38             ++flag;
39         }
40         else if(j<0 || j> n-1)
41         {
42             middle = A[i];
43             iterat(aSort,&i);
44             ++flag;
45         }
46         else if(A[i]<B[j]){
47             middle = A[i];
48             iterat(aSort,&i);
49             ++flag;
50         }
51         else{
52             middle = B[j];
53             iterat(bSort,&j);
54             ++flag;
55         }
56     }
57     if((m+n)%2)
58         return middle*1.0;
59     else{
60         if(i>m-1 || i<0)
61         {
62             return (middle+B[j])/2.0;
63         }
64         else if(j>n-1 || j<0)
65         {
66             return (middle+A[i])/2.0;
67         }
68         else
69             return (middle+(A[i]<B[j]?A[i]:B[j]))/2.0;
70     }
71 }
72     void iterat(bool sort,int* p)
73     {
74     if(sort)
75         ++*p;
76     else
77         --*p;
78     } 
79 };

写得比较长。(┬_┬)

Median of Two Sorted Arrays

标签:

原文地址:http://www.cnblogs.com/ittinybird/p/4338301.html

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