当前位置: 代码迷 >> 综合 >> leetcode_4.正序数组的中位数_zjx
  详细解决方案

leetcode_4.正序数组的中位数_zjx

热度:8   发布时间:2024-03-08 16:10:12.0

给定两个大小为 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
示例 3:

输入:nums1 = [0,0], nums2 = [0,0]
输出:0.00000
示例 4:

输入:nums1 = [], nums2 = [1]
输出:1.00000
示例 5:

输入:nums1 = [2], nums2 = []
输出:2.00000
 

提示:

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

// 寻找两个正序数组的中位数.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include<vector>
using namespace std;
class Solution {
public:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int s1Size = nums1.size(), s2Size = nums2.size();double result;int p1(0), p2(0);for (int i = 0; i < (s1Size + s2Size + 1) / 2; i++) {if (nums1[p1] < nums2[p2]) {result = nums1[p1];p1++;}else {result = nums2[p2];p2++;}}if ((s1Size + s2Size) % 2 == 0) {double temp;if (p1 < s1Size && p2 < s2Size)temp = (double)min(nums1[p1], nums2[p2]);else if (p1 == s1Size)temp = (double)nums2[p2];elsetemp = (double)nums1[p1];result = (result + temp) / 2.0;}return result;}};int main()
{Solution s = Solution();vector<int> s1, s2;// s1.push_back(1);s1.push_back(2);s2.push_back(3);s2.push_back(4);double result = double(s.findMedianSortedArrays(s1, s2));cout << result;}