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

server/2024/11/25 21:40:56/

题目描述

2个有序数组(保证不能同时为空)长度分别为m,n;求他们的中位数。
要求时间复杂度O(long(m+n))

解题思路

题目的要求可以转述为求第k大个数,k可能为1个数,可能为2个数。
k=(m+n)/2

  1. num1[k/2]表示第一个数组的第k/2个数。
  2. num2[k/2]表示第二个数组的第k/2个数。

下面进行分类讨论:

  • num1[k/2]<num2[k/2],那么只需要比较num1(k/2+1,m)和num2(0,n),且去掉了k/2个数。
  • num1[k/2]>num2[k/2],那么只需要比较num2(k/2+1,n)和num1(0,m),且去掉了k/2个数。
  • num1[k/2]=num2[k/2],该值就是答案。

每一次的比较k要进行修改。因为已经排除了k/2个数。
上述讨论没有结果就继续执行(递归或者循环)。

注意:

  • m+n为奇数,中位数1个。
  • m+n为偶数,中位数2个。

1个就找1遍,2个就找 2遍即可。

细节问题看具体的代码实现。

代码

class Solution {public:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int m=nums1.size(),n=nums2.size();if((m+n)%2==0){return (findMedian(nums1,nums2,0,0,(m+n)/2)+findMedian(nums1,nums2,0,0,(m+n)/2+1))/2.0;}else{return findMedian(nums1,nums2,0,0,(m+n)/2+1);}}int findMedian(vector<int>& nums1, vector<int>& nums2,int sp1,int sp2,int k){//保证nums1中要查找的元素个数小于nums2中的,是为了方便对边界进行处理。if(nums1.size()-sp1>nums2.size()-sp2) return findMedian(nums2,nums1,sp2,sp1,k);//当k位1的时候,就是两个数组中第一个元素中的最小值if(k==1){if(nums1.size()==sp1) return nums2[sp2];return min(nums1[sp1],nums2[sp2]);}//因为第一个数组查找的数据较小 ,容易越界if(nums1.size()==sp1) return nums2[sp2+k-1];//第一个数组,当越界的时候,只需要比较较小值即可。int i=min(sp1+k/2-1,(int)nums1.size()-1),j=sp2+k-k/2-1;if(nums1[i]<nums2[j]) return findMedian(nums1,nums2,i+1,sp2,k-(i-sp1+1));else  return findMedian(nums1,nums2,sp1,j+1,k-(j-sp2+1));}};

http://www.ppmy.cn/server/38318.html

相关文章

vue 脚手架 创建vue3项目

1、nodeJS下载地址&#xff1a;下载 Node.js 2、安装 nodeJS 打开cmd窗口检查是否安装成功&#xff1a;node -v&#xff08;如果显示出了版本号&#xff0c;那么说明安装成功了&#xff09; 设置阿里云镜像&#xff1a;npm config set registry https://registry.npmmirror.co…

苍穹外卖总结

1 软件开发流程 需求分析->设计->编码->单元测试->集成测试->上线运维 1.1 需求分析 交付结果&#xff1a;完成需求规格说明书、产品原型 需求规格说明书&#xff1a;系统定义、应用环境、功能规格、性能需求 产品原型&#xff1a;一般通过网页的形式展示当…

vue如何进行如何进行移动端的响应式布局

在Vue中进行移动端的响应式布局&#xff0c;通常涉及使用CSS媒体查询、灵活的盒模型布局、以及可能的第三方库或框架&#xff0c;如Vue UI库。下面是一个简单的Vue组件示例&#xff0c;展示了如何构建移动端的响应式布局&#xff1a; 首先&#xff0c;确保你有一个Vue项目。如…

pyqt 按钮常用格式Qss设置

pyqt 按钮常用格式Qss设置 QSS介绍按钮常用的QSS设置效果代码 QSS介绍 Qt Style Sheets (QSS) 是 Qt 框架中用于定制应用程序界面样式的一种语言。它类似于网页开发中的 CSS&#xff08;Cascading Style Sheets&#xff09;&#xff0c;但专门为 Qt 应用程序设计。使用 QSS&am…

SSM整合-前后端分离-项目环境搭建 (上)

整合SSM 项目基础环境搭建项目介绍创建项目项目全局配置web.xmlSpringMVC配置配置Spring和MyBatis, 并完成整合创建表, 使用逆向工程生成Bean, XxxMapper和XxxMapper.xml注意事项和细节说明 实现功能01-搭建Vue前端工程需求分析/图解代码实现搭建Vue前端工程vue3项目目录结构梳…

DAY 3

1. #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->resize(540,415);this->setFixedSize(540,415);//窗口标题this->setWindowTitle("盗版QQ");//窗口图标this->setWindowIcon(QIcon("E:\\qq\\pictrue\\pi…

YoloV8改进策略:BackBone改进DCNv4

摘要 涨点效果:在我自己的数据集上,mAP50 由0.986涨到了0.993,mAP50-95由0.737涨到0.77,涨点明显! DCNv4是可变形卷积的第四版,速度和v3相比有了大幅度的提升,但是环境搭建有一定的难度,对新手不太友好。如果在使用过程遇到编译的问题,请严格按照我写的环境配置。 Y…

相机内存卡格式化怎么恢复?恢复数据的3个方法

相机内存卡格式化后&#xff0c;许多用户都曾面临过照片丢失的困境。这些照片可能具有极高的纪念价值&#xff0c;也可能包含着重要的信息。因此如何有效地恢复这些照片变得至关重要。本文将详细介绍三种实用的恢复方法&#xff0c;帮助您找回那些珍贵的影像。 下面分享几个实…