4. 寻找两个正序数组的中位数

发布时间:2024年01月18日

给定两个大小分别为?m?和?n?的正序(从小到大)数组?nums1?和?nums2。请你找出并返回这两个正序数组的?中位数?。

算法的时间复杂度应该为?O(log (m+n))?。

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

提示:

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -106 <= nums1[i], nums2[i] <= 106

?

?double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {

? ? ? ? int m = nums1.size();

? ? ? ? int n = nums2.size();

? ? ? ? bool isDouble = false;

? ? ? ? if ((m + n) % 2 == 0) {

? ? ? ? ? ? isDouble = true;

? ? ? ? }

? ? ? ? int cur = 0;

? ? ? ? int index1 = 0;

? ? ? ? int index2 = 0;

? ? ? ? vector<double> vec;

? ? ? ? int mid = (m + n) / 2;

? ? ? ? while (cur <= mid) {

? ? ? ? ? ? if (index2 < n && index1 < m && nums1[index1] <= nums2[index2]) {

? ? ? ? ? ? ? ? vec.push_back(nums1[index1]);

? ? ? ? ? ? ? ? index1++;

? ? ? ? ? ? } else if (index2 < n && index1 < m &&

? ? ? ? ? ? ? ? ? ? ? ?nums1[index1] > nums2[index2]) {

? ? ? ? ? ? ? ? vec.push_back(nums2[index2]);

? ? ? ? ? ? ? ? index2++;

? ? ? ? ? ? } else if (index1 < m) {

? ? ? ? ? ? ? ? vec.push_back(nums1[index1]);

? ? ? ? ? ? ? ? index1++;

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? vec.push_back(nums2[index2]);

? ? ? ? ? ? ? ? index2++;

? ? ? ? ? ? }

? ? ? ? ? ? cur++;

? ? ? ? }

? ? ? ? cout << isDouble << endl;

? ? ? ? if (isDouble == false) {

? ? ? ? ? ? return vec[vec.size() - 1];

? ? ? ? }

? ? ? ? return (vec[vec.size() - 1] + vec[vec.size() - 2]) / 2;

? ? }

文章来源:https://blog.csdn.net/yinhua405/article/details/135664367
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。