-
Notifications
You must be signed in to change notification settings - Fork 64
/
Copy pathMedianOfTwoSortedArrays.cpp
84 lines (65 loc) · 2.04 KB
/
MedianOfTwoSortedArrays.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// LEETCODE 4. Median of Two Sorted Arrays { Hard } { Arrays }
// Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.
// The overall run time complexity should be O(log (m+n)).
// Example 1:
// Input: nums1 = [1,3], nums2 = [2]
// Output: 2.00000
// Explanation: merged array = [1,2,3] and median is 2.
// Example 2:
// Input: nums1 = [1,2], nums2 = [3,4]
// Output: 2.50000
// Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.
// Constraints:
// nums1.length == m
// nums2.length == n
// 0 <= m <= 1000
// 0 <= n <= 1000
// 1 <= m + n <= 2000
// -106 <= nums1[i], nums2[i] <= 106
### Solution
```
class Solution {
public double findMedianSortedArrays(int[] A, int[] B) {
int m = A.length;
int n = B.length;
if(m > n)
{
int[] temp = A; A = B; B = temp;
int tmp = m; m = n; n = tmp;
}
int imin = 0;
int imax = m;
int minR = 0;
int maxL = 0;
int half = ((m+n +1)/2 );
while(imin <= imax)
{
int i = (imin + imax) / 2;
int j = half- i;
if(i < imax && B[j-1] > A[i])
imin = i +1;
else if (i > imin && A[i-1] > B[j])
imax = i -1;
else
{
maxL = 0;
if( i == 0)
maxL = B[j-1];
else if (j ==0)
maxL = A[i-1];
else
maxL = Math.max(A[i-1], B[j-1]);
if((m + n) %2 == 1) return maxL;
if( i == m)
minR= B[j];
else if (j == n)
minR = A[i];
else
minR = Math.min(A[i], B[j]);
return (minR + maxL )/ 2.0;
}
}
return 0.0;
}
}
```