forked from shruti170901/Leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMedian of Two Sorted Arrays.cpp
52 lines (47 loc) · 1.58 KB
/
Median of Two Sorted Arrays.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Solution {
public:
double findMedianSortedArrays(vector<int>& A, vector<int>& B) {
int l=0, r, m=A.size(), n=B.size();
if(m<=n){
r=m;
while(l<=r){
int i=(l+r)/2, j=(m+n+1)/2;
j-=i;
if(i>l && A[i-1]>B[j]) r=i-1;
else if(i<r && B[j-1]>A[i]) l=i+1;
else{
int maxl, minr;
if(i==0) maxl=B[j-1];
else if(j==0) maxl=A[i-1];
else maxl=max(A[i-1], B[j-1]);
if((m+n)%2) return maxl;
if(i==m) minr=B[j];
else if(j==n) minr=A[i];
else minr=min(A[i], B[j]);
return (maxl+minr)/2.0;
}
}
}
else{
r=n;
while(l<=r){
int i=(l+r)/2, j=(m+n+1)/2;
j-=i;
if(i>l && B[i-1]>A[j]) r=i-1;
else if(i<r && A[j-1]>B[i]) l=i+1;
else{
int maxl, minr;
if(i==0) maxl=A[j-1];
else if(j==0) maxl=B[i-1];
else maxl=max(B[i-1], A[j-1]);
if((m+n)%2) return maxl;
if(i==n) minr=A[j];
else if(j==m) minr=B[i];
else minr=min(B[i], A[j]);
return (maxl+minr)/2.0;
}
}
}
return 0;
}
};