[leetcode.4]寻找两个正序数组的中位数 多思考边界

news2024/11/15 12:41:50

题目展示

 题目要点

题目其实本身的思路非常简单,就是把两个数组给合并起来,然后寻找中位数,具体可以参考我们使用归并排序时候的最后一步,这题的难点其实在于(1)时间压缩到logn+m(2)边界情况

难点处理

(1)复杂度问题确实不太好搞

(2)边界情况需要更多的注意

(1)情况1:在输入的时候有一个向量是空的

(2)情况2:在进行比较,寻找数字的时候,可能会让某一个向量走到了尽头’

(3)情况3:要记得判断一下总长度是奇数还是偶数

这里有一个错误地点就是:直接寻找中位数的时候,注意一下第mid个元素在mid-1的位置上

坑死了真的是

处理思路

(1)首先先判断,是否有哪个队列是空的,因为题目的限制是没有队列为空,所以只要判断其中一个为空就可以。然后判断一下另一个队列里面的长度是奇数还是偶数,再去寻找可用的数字输出

(2)如果两个队列都不是空的,就计算一下这俩的总长度,寻找中位数所在的位置

这里我们假设有一个变量是mid=(length)/2;

如果总长度为奇数,我们就要输出第mid+1个数字

如果总长度为偶数,我们就要输出mid和mid+1个数字的平均数

然后for循环mid+1次即(这里把mid个数字和mid+1个数字都得出来,再根据具体情况进行计算)

(3)在每次for循环中,首先判断是不是某个向量已经为空了

具体代码如下,不过成绩不是很乐观

double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
     int n=nums1.size();
     int m=nums2.size();
     int mid=(m+n)/2;
     double temp[2];
     int point=0;
     //这题整体的思路就有问题
     if(n==0){//第一种情况,如果nums1为空队列
         if(m%2==0){
             return (nums2[mid-1]+nums2[mid+1-1])/2.0;
         }else{
             return nums2[mid+1-1];
         }
     }else if(m==0){//第二种情况,如果nums2为空队列
         if(n%2==0){
             return (nums1[mid-1]+nums1[mid+1-1])/2.0;
         }else{
             return nums1[mid+1-1];
         }
     }else{//这俩目前都不是空队列
         for(int i=1;i<=mid+1;i++){
             if(!nums1.empty()&&!nums2.empty()){//如果这俩目前都不是空的
                 if(nums1.front()>nums2.front()){
                     if(i>=mid){
                         temp[point++]+=nums2.front();
                     }
                     nums2.erase(nums2.begin());
                 }else{
                     if(i>=mid){
                         temp[point++]+=nums1.front();
                     }
                     nums1.erase(nums1.begin());
                 }
             }else if(nums1.empty()){//如果第一个队列空了
                 if(i>=mid){
                     temp[point++]+=nums2.front();
                 }
                 nums2.erase(nums2.begin());
             }else{//如果第二个队列空了
                 if(i>=mid){
                     temp[point++]+=nums1.front();
                 }
                 nums1.erase(nums1.begin());
             }
         }
        return (m+n)%2==0?(temp[0]+temp[1])/2.0:temp[1];
     }


}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Nodejs计算机毕业设计基于与协同过滤算法的竞赛项目管理Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

基于MMEngine和MMDet搭建目标跟踪框架MMTracking-1.0.0rc1-Win10

缘由&#xff1a; 1. 目标跟踪是工业检测和学术研究的基础课题&#xff0c;其pipeline通常分为视频目标检测、视频实例分割、单目标跟踪、多目标跟踪和Re-ID五类&#xff0c;同时&#xff0c;还细分为在线检测和离线检测两种任务模式。由于现阶段关于目标跟踪的教程较少&#…

机器学习 KNN算法原理

目录 一&#xff1a;KNN算法概念 二&#xff1a;KNN原理 三&#xff1a;KNN超参数 四&#xff1a;KNN算法选择 一&#xff1a;KNN算法概念 KNN(K-Nearest Neighbor)法即K最邻近法&#xff0c;最初由Cover和Hart于1968年提出&#xff0c;是最简单的机器学习算法之一 算法思路…

NNDL 作业9:分别使用numpy和pytorch实现BPTT

6-1P&#xff1a;推导RNN反向传播算法BPTT. 6-2P&#xff1a;设计简单RNN模型&#xff0c;分别用Numpy、Pytorch实现反向传播算子&#xff0c;并代入数值测试.、 forward&#xff1a; 我们知道循环卷积网络的cell的计算公式为&#xff1a; stf(UxtWst−1)\mathrm{s}_tf(…

UML学习入门

UML 举一个简单的例子&#xff0c;来看这样一副图&#xff0c;其中就包括了UML类图中的基本图示法。 首先&#xff0c;看动物矩形框&#xff0c;它代表一个类&#xff08;Class&#xff09;。类图分三层&#xff0c;第一层显示类的名称&#xff0c;如果是抽象类&#xff0c;则…

多模块之前的消息引用问题

多模块引用之前的问题目录概述需求&#xff1a;设计思路实现思路分析1.在第一个模块中调用另一个调用模块的Bean2.普通java类 如何获取另一个模块的Bean3.启用消息机制4.为什么普通java类很难调用SpringBean的&#xff1f;参考资料和推荐阅读Survive by day and develop by nig…

机器学习快速上手基础

努力是为了不平庸~ 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。 目录 一、简介与应该明确的学习方法 1、学习方法 2、简介 二、学习机器学习的优势 三、机器学习的内核 1、学习术语 2、内核 四、机器学习…

IT团队自动化端点管理解决方案—基于虹科Chef工具

企业如何简化端点管理工作流程&#xff1f; 如何解决安全事件&#xff1f;如何生成审计报告&#xff1f;如何处理大量账单&#xff1f;这些都是企业IT团队需要考虑的问题。然而&#xff0c;IT人员每天有大量的事情需要处理&#xff0c;如何自动化、标准化、及时性的处理这些问…

(最优化理论与方法)第六章无约束优化算法-第二节:梯度类算法

文章目录一&#xff1a;次梯度算法&#xff08;1&#xff09;次梯度算法结构&#xff08;2&#xff09;应用举例-LASSO问题求解二&#xff1a;牛顿法&#xff08;1&#xff09;经典牛顿法&#xff08;2&#xff09;修正牛顿法三&#xff1a;拟牛顿法&#xff08;1&#xff09;拟…

知到/智慧树——英语听说:实境主题与技能(参考答案)

目录 第一章测试 第二章测试 第三章测试 第四章测试 第五章测试 第六章测试 第七章测试 第八章测试 第九章测试 第十章测试 第一章测试 第1部分总题数: 10 1 【多选题】 (10分) What does this chapter mainly teach &#xff08; &#xff09;&#xff1f; A. T…

生成树(基础)

目录 一、生成树的相关概念 二、最小生成树的相关概念 最小生成树的性质(MST性质)&#xff1a; MST性质解释&#xff1a; 三、Prim算法&#xff08;普里姆算法&#xff09; 动态演示 关键算法&#xff1a; 完整代码&#xff1a; 四、Kruskal(克鲁斯卡尔)算法 动态演示&…

mysql主从复制架构

MySQL的主从复制架构的分布机制&#xff0c;是通过将MySQL的某一台主机(master)的数据复制到其他主机(slave)上。 在复制过程中一台主机作为主服务器&#xff0c;其他服务器则为从服务器。主服务器将更新写入到日志文件中&#xff0c;日志被从服务器的 I/O线程读取&#xff0c;…

逻辑回归 预测癌症数据

目录 一&#xff1a;加载数据 二&#xff1a;数据集划分 三&#xff1a;选择算法 四&#xff1a;网格模型 超参调优 五&#xff1a;模型预测 六&#xff1a;模型保存和使用 七&#xff1a;完整源码分享 八&#xff1a;预测与实际比对 一&#xff1a;加载数据 from sk…

C语言—变量与常量

想存储一个数据时&#xff0c;都会在内存中开辟一个空间&#xff0c;这个空间会有一个地址&#xff1b; 这个地址是一串数字&#xff0c;为了方便记忆&#xff0c;所以要对这个地址起一个名字&#xff0c;也就是变量名&#xff1b; 通过这个变量名就可以找到内存中存放这个数…

java高校学生电器报修系统ssm高校后勤报修系统小程序源码和论文

随着高校每年的扩大招生&#xff0c;学校人数越来越多&#xff0c;学校后勤报修管理的工作量也越来越繁重。使用传统的管理手段和方法&#xff0c;很难完成大量的信息分析和处理。因此&#xff0c;充分利用网络资源和信息化技术&#xff0c;建设一套基于校园网的学校后勤报修管…

fpga实操训练(uart串口)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果说led灯、按键、数码管这些都只能算是基础的话&#xff0c;那么学习fpga遇到的第一个门槛就是uart。要做好uart&#xff0c;首先需要了解串口的…

Thymeleaf 预处理表达式__${表达式}__之国际化使用案例

目录一. 前期准备1.1 国际化项目获取类1.2 国际化配置文件类1.3 项目配置文件1.4 国际化资源文件二. __${表达式}__预处理表达式2.1 在Thymeleaf中使用Spring的Bean2.2 通过#{}获取国际化资源2.3 预处理表达式__${表达式}__的使用三. 效果一. 前期准备 1.1 国际化项目获取类 …

linux系统中RGBLCD的基本操作和实现方法

大家好&#xff0c;今天主要来聊一聊&#xff0c;如何控制RGBLCD屏的方法。 目录 第一&#xff1a;LCD基本简介 第二&#xff1a;LCD屏的要点 第三&#xff1a;LCD屏具体配置步骤 第四&#xff1a;LCD屏具体的代码实现 第一&#xff1a;LCD基本简介 LCD液晶屏是常用的外设&…

Linux常用命令,能解决工作中99%的Linux操作问题

目录 一、ls 二、pwd 三、cd 四、touch 五、mkdir 六、rmdir&rm 七、man 八、cp 九、mv 九、cat 十、move 十一、less 十二、head 十三、tail 十四、时间 十五、cal 十六、find 十七、grep 十八、zip/unzip 十九、tar 二十、计算器 二十一、uname 二…

SpringBoot 整合Netty自定义消息协议

本文主要介绍springboot项目&#xff0c;配置netty进行消息通信&#xff0c;自定义的netty消息协议&#xff0c;本文消息主要以表格中进行 消息头消息体长度加密标识&#xff08;可选&#xff09;加密类型&#xff08;可选&#xff09;消息体标识消息体校验码2字节2字节1字节&…