目录
1.寻找两个正序数组的中位数

cpp
class Solution {
public:
int getMinKth(vector<int>& nums1, vector<int>& nums2, int k)
{
int m = nums1.size(), n = nums2.size();
int index1 = 0, index2 = 0;
while(true)
{
if(index1 == m) return nums2[index2 + k - 1];
if(index2 == n) return nums1[index1 + k - 1];
if(k == 1) return min(nums1[index1], nums2[index2]);
int newIndex1 = min(index1 + k / 2 - 1, m - 1);
int newIndex2 = min(index2 + k / 2 - 1, n - 1);
int sum1 = nums1[newIndex1];
int sum2 = nums2[newIndex2];
if(sum1 <= sum2)
{
k -= newIndex1 - index1 + 1;
index1 = newIndex1 + 1;
}
else
{
k -= newIndex2 - index2 + 1;
index2 = newIndex2 + 1;
}
}
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2)
{
int length = nums1.size() + nums2.size();
if(length % 2 == 1)
return getMinKth(nums1, nums2, (length + 1) / 2);
else
return (getMinKth(nums1, nums2, length / 2) + getMinKth(nums1, nums2, length / 2 + 1)) / 2.0;
}
};