【算法day3】寻找两个正序数组的中位数
寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
https://leetcode.cn/problems/median-of-two-sorted-arrays/description/
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int mid = (nums1.size() + nums2.size()) / 2 - 1;
int odds = (nums1.size() + nums2.size()) % 2;
int mid_num1 = 0, mid_num2 = 0;
int i = 0, j = 0, k = 0;
// 偶数取均值,奇数取中间那个值
while (i < nums1.size() && j < nums2.size() && k <= mid) {
if (nums1[i] < nums2[j]) {
mid_num1 = nums1[i];
i++;
} else {
mid_num1 = nums2[j];
j++;
}
k++;
}
while (i < nums1.size() && k <= mid) {
mid_num1 = nums1[i];
i++;
k++;
}
while (j < nums2.size() && k <= mid) {
mid_num1 = nums2[j];
j++;
k++;
}
if (i < nums1.size() && j < nums2.size()) {
if (nums1[i] < nums2[j]) {
mid_num2 = nums1[i];
} else {
mid_num2 = nums2[j];
}
} else if (i < nums1.size()) {
mid_num2 = nums1[i];
} else if (j < nums2.size()) {
mid_num2 = nums2[j];
}
if (odds % 2 == 0) {
float result = mid_num1 + mid_num2;
return result / 2;
} else {
return mid_num2;
}
}
};