软件开发工具及公司沈阳seo排名优化教程
寻找两个正序数组的中位数
给定两个大小分别为 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;}}
};