-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path4-median-of-two-sorted-arrays.cpp
69 lines (68 loc) · 1.88 KB
/
4-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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int len1 = nums1.size();
int len2 = nums2.size();
int half_len = (len1 + len2 + 1) / 2;
bool is_odd = (len1 + len2) % 2;
if (len1 > len2)
{
vector<int> temp = nums1;
nums1 = nums2;
nums2 = temp;
int _temp = len1;
len1 = len2;
len2 = _temp;
}
int left_bound = 0;
int right_bound = len1;
int mid = (left_bound + right_bound + 1) / 2;
while (left_bound <= right_bound)
{
mid = (left_bound + right_bound + 1) / 2;
int _mid = half_len - mid;
if (mid < len1 && nums1[mid] < nums2[_mid - 1])
{
left_bound = mid + 1;
}
else if (mid > 0 && nums1[mid - 1] > nums2[_mid])
{
right_bound = mid - 1;
}
else
{
int a = 0;
if (mid == 0)
{
a = nums2[_mid - 1];
}
else if (_mid == 0)
{
a = nums1[mid - 1];
}
else
{
a = max(nums1[mid - 1], nums2[_mid - 1]);
}
if (is_odd)
{
return a;
}
int b = 0;
if (mid == len1)
{
b = nums2[_mid];
}
else if (_mid == len2)
{
b = nums1[mid];
}
else
{
b = min(nums1[mid], nums2[_mid]);
}
return ((double)(a + b)) / 2;
}
}
}
};