ouble findkmin(vector<int>& nums1, vector<int>& nums2, int k) {
int n = nums1.size();
int m = nums2.size();
int p1 = 0, p2 = 0;
while (true) {
//边界情况
if (p1 == n) return nums2[p2 + k - 1];
if (p2 == m) return nums1[p1 + k - 1];
if (k == 1) return min(nums1[p1], nums2[p2]);
//正常情况
int newp1 = min(n - 1, p1 + k / 2 - 1);
int newp2 = min(m - 1, p2 + k / 2 - 1);
if (nums1[newp1] <= nums2[newp2]) {
k -= newp1 - p1 + 1;
p1 = newp1 + 1;
}
else {
k -= newp2 - p2 + 1;
p2 = newp2 + 1;
}
}
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n = nums1.size() + nums2.size();
if (n % 2) {
return findkmin(nums1, nums2, n / 2 + 1)*1.0;
}
else {
return (findkmin(nums1, nums2, n / 2) + findkmin(nums1, nums2, n / 2 + 1)) / 2.0;
}
数组4
最新推荐文章于 2022-12-02 09:00:00 发布