LeetCode 2.Median of Two Sorted Arrays

Median of Two Sorted Arrays

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)).

Solution

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 class Solution {
 5 public:
 6 
 7     double findMedianSortedArrays(int A[], int m, int B[], int n) 
 8     {
 9         int  findNum=0;
10         if((m+n)%2==0)
11             findNum=2;
12         else
13             findNum=1;
14 
15         int leftOffsetA=0,leftOffsetB=0;
16         int rightOffsetA=0,rightOffsetB=0;
17         while(leftOffsetA+leftOffsetB+rightOffsetA+rightOffsetB!=m+n-findNum)
18         {
19             
20             if(leftOffsetA==m|| rightOffsetA==m)
21             {
22                 //左右端都在B中
23                 int halfLenthOfPartB=(n-1-leftOffsetB-rightOffsetB)/2;
24                 leftOffsetB+=halfLenthOfPartB;
25                 rightOffsetB+=halfLenthOfPartB;
26                 break;
27             }
28             else if(leftOffsetB==n|| rightOffsetB==n)
29             {
30                 //左右端都在A中
31                 int halfLenthOfPartA=(m-1-leftOffsetA-rightOffsetA)/2;
32                 leftOffsetA+=halfLenthOfPartA;
33                 rightOffsetA+=halfLenthOfPartA;
34                 break;
35             }
36             else
37             {
38                 //左端还分别在A、B中
39                 if(A[leftOffsetA]<B[leftOffsetB])
40                     leftOffsetA++;
41                 else
42                     leftOffsetB++;
43 
44                 if(A[m-1-rightOffsetA]>B[n-1-rightOffsetB])
45                     rightOffsetA++;
46                 else
47                     rightOffsetB++;
48             }
49         }
50     //    cout<<"leftOffsetA:"<<leftOffsetA<<" rightOffsetA"<<rightOffsetA<<endl;
51     //    cout<<"leftOffsetB:"<<leftOffsetB<<" rightOffsetB"<<rightOffsetB<<endl;
52         
53         //取出两段截断的int数据
54         vector<int> ivec;
55         for(int index_i=leftOffsetA;index_i<=m-1-rightOffsetA &&index_i<m;index_i++)
56         {
57             ivec.push_back(A[index_i]);
58             //cout<<"A中取出:"<<A[index_i]<<endl;
59         }
60         for(int index_i=leftOffsetB;index_i<=n-1-rightOffsetB &&index_i<n;index_i++)
61         {
62             ivec.push_back(B[index_i]);
63             //cout<<"B中取出:"<<B[index_i]<<endl;
64         }
65         if(findNum==1)
66             return ivec[0];
67         else
68             return (ivec[0]+ivec[1])/2.0f;
69         
70     }
71 };

 

posted on 2014-12-28 18:36  kyokuhuang  阅读(196)  评论(0编辑  收藏  举报

导航