
double findMedianSortedArrays(vector<int>& num1, vector<int>& num2) {
if (num1.size()>num2.size()) {
return findMedianSortedArrays(num2, num1);
}
int key = (num1.size() + num2.size() - 1) / 2;
int left = 0;
int right = min((int)num1.size(), key);
while (left<right) {
int mid1 = (left + right) / 2;
int mid2 = key - mid1;
if (num1[mid1]<num2[mid2]) {
left = mid1 + 1;
}
else {
right = mid1;
}
}
int odd = max(left>0 ? num1[left - 1] : INT_MIN, key - left >= 0 ? num2[key - left] : INT_MIN);
if((num1.size()+num2.size())%2==1)return odd;
int even = min(left<num1.size() ? num1[left] : INT_MAX, key - left +1 < num2.size()? num2[key - left + 1] : INT_MAX);
return (double)(odd+even)/2;
}