Leecode热题100---二分查找--4:寻找两个正序数组的中位数

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

在这里插入图片描述
解法1、暴力解法(归并)
思路:
合并 nums1,nums2 为第三个数组
排序第三个数组
按下标,找出中位数

class Solution
{
public:double findMedianSortedArrays(vector<int>& nums1,vector<int>& nums2){int m = nums1.size(), n = nums2.size(), k=0, i=0, j=0;vector<int> result(m+n,0);while(i<m && j<n){if(nums1[i] < nums2[j]){result[k] = nums1[i];i++;}else{result[k] = nums2[j];j++;}k++;}// nums1或nums2有一个已经遍历完while(i<m){result[k] = nums1[i];i++;k++;}while(j<n){result[k] = nums2[j];j++;k++;}// %:取余,判断奇偶return k % 2 ? result[k/2]:(result[k/2]+result[k/2-1])/2.0;}
};

解法2、双指针法
思路
申请2个指针,分别指向2个数组的头
每次比较大小来移动 2个指针
指针移动的次数与(m + n) / 2 相同时,得到中位数

注意边界问题:
2个指针在移动时,是否有超过2个数组的最大个数;
如果有,后续就只能移动另一个指针

class Solution
{
public:double findMedianSortedArrays(vector<int>& nums1,vector<int>& nums2){int m = nums1.size(), n = nums2.size(),i=0, j=0, L=0, R=0;for(int x = 0;x <= (m+n)/2; x++){L = R;if(i<m && (j >= n || nums1[i] < nums2[j]))	// j >= n:包含了边界问题{R = nums1[i];i++;}else{R = nums2[j];j++;}}// % 取余,为1是奇数,R值为中位数,L为其上一个数;为0是偶数,R/L为中位数两端的数return (m+n)%2 ? R: (R+L)/2.0;}	
};

解法3:二分查找法
此题用二分查找法不好理解,放弃;
建议使用暴力归并法和双指针法解题

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

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

相关文章

XXL-JOB分布式任务调度框架详解(全网最详细!!!)

​​​​​​​ 引言 第一部分&#xff1a;XXL-JOB概述 第二部分&#xff1a;架构与组件 第三部分&#xff1a;使用教程 第四部分&#xff1a;源码分析 第五部分&#xff1a;最佳实践 引言 在分布式系统中&#xff0c;任务调度是一项基础而又关键的服务&#xff0c;它涉…

Java设计模式:享元模式实现高效对象共享与内存优化(十一)

码到三十五 &#xff1a; 个人主页 目录 一、引言二、享元设计模式的概念1. 对象状态的划分2. 共享机制 三、享元设计模式的组成四、享元设计模式的工作原理五、享元模式的使用六、享元设计模式的优点和适用场景结语 [参见]&#xff1a; Java设计模式&#xff1a;核心概述&…

解决Spring BeanCreationException的常见问题

解决Spring BeanCreationException的常见问题 在使用Spring框架进行开发时&#xff0c;可能会遇到各种异常&#xff0c;其中之一就是BeanCreationException。本文将介绍如何解决以下特定的异常&#xff1a; org.springframework.beans.factory.BeanCreationException: Error …

拼接字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 使用“”运算符可完成对多个字符串的拼接&#xff0c;“”运算符可以连接多个字符串并产生一个字符串对象。 例如&#xff0c;定义两个字符串&#…

任务3.1:采用面向对象方式求三角形面积

面向对象编程&#xff08;OOP&#xff09;是一种将现实世界中的实体抽象为对象&#xff0c;并通过类和对象来模拟现实世界中的行为和属性的编程范式。在本实战任务中&#xff0c;我们通过创建一个Triangle类来模拟现实世界中的三角形&#xff0c;并使用面向对象的方法来求解三角…

「清新题精讲」CF249D - Donkey and Stars

更好的阅读体验 CF249D - Donkey and Stars Description 给定 n n n 个点 ( x i , y i ) (x_i,y_i) (xi​,yi​) 和 a , b , c , d a,b,c,d a,b,c,d&#xff0c;求出最多有多少个点依次连接而成的折线上线段的斜率在 ( a b , c d ) (\frac{a}{b},\frac{c}{d}) (ba​,dc​…

linux怎么查询远程管理卡型号

在Linux中&#xff0c;要查询远程管理卡&#xff08;通常是服务器主板上的集成芯片&#xff0c;如iDRAC、iLO、BMC等&#xff09;的型号&#xff0c;可以使用一些特定厂商的工具&#xff0c;或者通过IPMI&#xff08;Intelligent Platform Management Interface&#xff09;来实…

【智能算法】波搜索算法(WSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;H Zhang受到雷达技术启发&#xff0c;提出了波搜索算法&#xff08;Wave Search Algorithm, WSA&#xff09;。 2.算法原理 2.1算法思想 WSA模拟雷达工作时的发射、反…

opencascade 笔记

opencascade 画一个无限大的面 在 OpenCascade 中&#xff0c;要绘制一个无限大的面&#xff0c;你可以使用 gp_Pln 类来定义一个平面&#xff0c;然后将其绘制出来。这里是一个示例代码&#xff0c;演示如何在 OpenCascade 中绘制一个无限大的平面&#xff1a; #include <…

学生管理系统 面向过程

#学生管理系统 面向过程 学生管理系统 面向过程 学生信息:name,tel 1.添加学生 2.删除学生 3.修改学生 4.查询学生 5.查询所有学生 6.退出系统 # 定义一个空列表 stu_list []# help 展示不同的功能 def helplist():print(欢迎使用学生管理信息)print(1.添加学生)print(2.删除学…

Hudi之数据读写探究

Hudi之数据读写深入探究 1. Hudi数据写入 1-1. 写操作 Hudi数据湖中的数据更新、插入和删除操作&#xff0c;是一个基于Apache Hadoop的库&#xff0c;为数据湖提供了一种有效的方法来处理更新和增量数据&#xff0c;并支持基于时间的快照和增量数据处理。Hudi支持三种主要的…

ts:交集类型 交叉类型

除联合类型的交集是取共同的部分外&#xff0c;其他类型的交集是取所有 type TypeA { a: string; b: number; }; type TypeB { b: number; c: boolean; }; type IntersectionType TypeA & TypeB; // { a: string; b: number; c: boolean; }type test2 (1 | 2) & …

N叉树遍历

E. 雪中楼 西安交通大学下雪了&#xff0c;所有楼顶都被积雪覆盖。 在梧桐道上有 n 座房子&#xff0c;自南向北第i座房子的标号是i&#xff0c;所有房子的高度互不相同。LNC从南向北&#xff0c;依次登上每栋楼楼顶&#xff0c;然后他会回头观察他已经到达过的房子&#xff0…

博物馆三维实景vr展示

VR技术应用到地产行业的优势不言而喻&#xff0c;随着购房政策的进一步放宽&#xff0c;购房刚需者借助VR商铺样板间展示系统看房&#xff0c;远比之前跑楼盘更便捷高效。那么VR商铺全景展示具体有哪些好处呢? VR技术与商铺的结合&#xff0c;为客户带来了前所未有的购房体验。…

前端学习Promise函数

前端学习Promise函数 一、前言1.示例2.调用与处理结果 一、前言 当需要处理异步操作时&#xff0c;Promise 是一种非常方便的解决方案。下面是一个简单的 Promise 函数示例&#xff0c;该函数会模拟异步获取数据的过程&#xff0c;并返回一个 Promise 对象&#xff1a; 1.示例…

Thingsboard规则链:Calculate Delta节点详解

在物联网(IoT)应用中&#xff0c;对设备数据的实时分析和处理是优化运营、预测维护的关键。Thingsboard作为一款功能强大的物联网平台&#xff0c;其规则引擎提供了丰富的节点来处理和分析数据流。其中&#xff0c;Calculate Delta节点是一个重要的工具&#xff0c;用于计算连续…

2024年西安交通大学程序设计校赛(ABCDEFO)

题目链接&#xff1a;https://vjudge.net/contest/630537#overview 文章目录 A题题意思路编程 B题题意思路编程 C题题意思路编程 D题题意思路编程 E题题意思路编程 F题题意思路编程 O题题意思路编程 写在前面&#xff1a;今天的训练赛出的题目偏简单&#xff0c;与XCPC的难度差…

经典面试题:什么是事物的隔离级别?什么是MVCC?

目录 前言一、事物的隔离级别二、隔离级别是如何实现的1. 锁定技术2. 多版本并发控制&#xff08;MVCC&#xff09;基本原理实现机制优缺点 3. 乐观锁与悲观锁 三、MySQL设置隔离级别MySQL数据库Java (使用JDBC) 前言 事务的四大特性&#xff08;ACID特性&#xff09;&#xf…

Git标签的使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

结巴分词原理

结巴分词是一种中文分词算法&#xff0c;采用基于词频和词汇概率的方法对文本进行切割&#xff0c;将连续的中文字符序列切分成有意义的词&#xff0c;结巴分词被称为“高性能的中文分词工具”。 其原理是通过对中文文本进行扫描&#xff0c;利用前缀词典和后缀词典构建起DAG(有…