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

此教程使用c++版本编写代码,如需其他版本,请自行修改,并在力扣网站中测试!
题目描述
给定两个大小分别为 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 == mnums2.length == n0 <= m <= 10000 <= n <= 10001 <= m + n <= 2000-106 <= nums1[i], nums2[i] <= 106c++题目源码:
解决方案一:
//中位数的理解://有序序列//总数是奇数//1 2 3 4 5 5/2 =2//总数是偶数//1 2 3 4 5 6 6/2=3 (3+4)/2.0=3.5//合并两个有序序列//查找中位数即可class solution {public: double findmediansortedarrays(vector& nums1, vector& nums2){ //合并得到一个有序序列 vector result; for(auto& v:nums1) { result.push_back(v); } for(auto& v:nums2) { result.push_back(v); } sort(result.begin(),result.end()); //分为奇数和偶数的情况输出中位数即可 int length=result.size(); if((length+1)%2==0) //奇数个长度 { return result[length/2]; } else { int pos=length/2; return (result[pos-1]+result[pos])/2.0; } }};解决方案二:
class solution {public: double findmediansortedarrays(vector& nums1, vector& nums2) { vector result(nums1.size()+nums2.size()); if(nums1.size()==0) { copy(nums2.begin(),nums2.end(),result.begin()); } else if(nums2.size()==0) { copy(nums1.begin(),nums1.end(),result.begin()); } else { merge(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),result.begin()); } int pos=result.size()/2; return pos!=0&&result.size()%2==0?(result[pos-1]+result[pos])/2.0:result[pos]; }};

东芝3相直流无刷驱动IC,助力工业及消费电子电机性能升级
任正非对欧美国家禁止华为进入一事表示有很多东西他们非买不可
全球2700万辆汽车配备Mobileye技术,助推自动驾驶落地
联想新机将搭载国产双频北斗高精度导航定位SoC芯片HD8040
数据需要获得赋能和拓展,是推动数字经济全域发展之根本
寻找两个正序数组的中位数
三安集团出售1.89%的公司总股本 并获得战略投资者提供的金额约26亿元
STM32基础知识:中断系统
关于孔板/巴类/平衡流量计的介绍
以STM8L15x 芯片为例介绍电压监测电源电压
如何选购HDMI电缆,有哪些技巧和事项
劲爆!2016年5月畅销手机市场分析报告
java高级语言制作智能小车编程实例
机器人咖啡厅在日本开业,由软银机器人提供技术支持
Vivo继续为其Y系列添加新成员
中国通信行业的发展历史以及目前现状
天玑 × 虎牙高能嘉年华燃情谢幕,MediaTek 天玑助力电竞名手决胜赛场
相控阵波束成形IC如何简化天线设计详细解决方法说明
UAVOS成功测试其VTOL无人机的新飞行算法
民生健康将利用区块链技术进行商业创新