首页 > 其他分享 >Leecode热题100---二分查找--4:寻找两个正序数组的中位数

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

时间:2024-05-30 14:32:05浏览次数:13  
标签:-- 中位数 --- ++ Leecode result nums1 nums2 指针

题目
给定两个大小分别为 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:二分查找法
此题用二分查找法不好理解,放弃;
建议使用暴力归并法和双指针法解题

标签:--,中位数,---,++,Leecode,result,nums1,nums2,指针
From: https://blog.csdn.net/qq_41920323/article/details/139304509

相关文章

  • Python+Py可执行程序适配win7系统(完美简单解决)
           之前用python3.11+pyqt5开发的可执行程序,在win7执行报错,尝试了多种方法,通过降低python版本,pyqt5版本以及打包时包含相应外部库等方式,执行时均出现报错。报错情况:        1.如果你系统相关vc++支持库都已安装,执行时报错:缺少api-ms-win-core-path-......
  • 【源码】Spring Data JPA原理解析之Repository自定义方法命名规则执行原理(一)
     SpringDataJPA系列1、SpringBoot集成JPA及基本使用2、SpringDataJPACriteria查询、部分字段查询3、SpringDataJPA数据批量插入、批量更新真的用对了吗4、SpringDataJPA的一对一、LazyInitializationException异常、一对多、多对多操作5、SpringDataJPA自定......
  • 在Matpower中接入光伏发电
    在Matpower中,Bus有以下4种类型:①PQ节点(负荷节点);②PV节点(电压控制/发电机节点);③平衡节点;④孤岛节点;由于Matpower的标准案例文件中不包含光伏发电机节点,因此需要在PV节点上接入光伏发电机。1.加载和修改标准案例文件functionmpc=case9_with_pv()  %加载标准测试......
  • 三种U盘文件系统介绍
    U盘常用的文件系统主要有FAT32,NTFC,exFAT三种。1.FAT32:兼容性:具有较好的兼容性,能被大多数操作系统识别和支持,包括Windows,Mac和Linux等。文件大小限制:不支持大于4GB的单个文件的传输。分区容量限制:FAT32格式U盘的最大分区容量不能超过32GB。适用场景:适合用于储存小文件,如文档,......
  • 认识Excel和Excel的一些知识点
    认识Excel:Excel是一款功能强大的电子表格软件,广泛应用于数据分析、数据处理、图表制作等工作中。本文将介绍Excel的基础知识,包括单元格、工作表、函数、筛选和排序等内容。我们来了解一下Excel中的单元格。单元格是Excel中最基本的单位,由列字母和行数字组成,例如A1、B2等。每......
  • OpenCv之简单的人脸识别项目(人脸识别页面以及人脸比对页面)
    人脸识别准备三、人脸识别页面1.导入所需的包2.设置窗口2.1定义窗口外观和大小2.2设置窗口背景2.2.1设置背景图片2.2.2创建label控件3.定义两个全局变量4.定义选择并显示图片的函数4.1声明全局变量4.2设置文件选择对话框4.3设置条件语句4.4创建一个标签显示图像5.定义......
  • 如何隐藏 Firefox 窗口(Selenium WebDriver)?
    在Python中使用SeleniumWebDriver隐藏Firefox窗口通常涉及到配置FirefoxOptions来禁用其图形界面的显示。以下是一个详细的步骤和代码示例:1.首先,确保你已经安装了selenium库,以及geckodriver(适用于Firefox浏览器)。如果还没有安装,可以通过pip进行安装:```bashpipinstallsel......
  • CATIA二次开发VBA入门(4)——进程外开发环境搭建,vb.net在Visual Studio中开发,创建圆柱曲
    目录引出vb.net和vb6.0进程外开发环境搭建vb.net开发环境搭建《CATIA二次开发技术基础》模板添加宏库引用vs开发环境初步vs中的立即窗口对象浏览器建立模板案例:创建一堆圆柱曲面第一步:录制宏第二步:代码精简第三步:for循环改造第四步:人机交互改造窗口模态设置导出窗口......
  • 企业防泄密软件有哪些?这三款企业加密软件不容错过
    在数字化浪潮下,企业数据的保密工作变得尤为重要。为了有效防止数据泄露,众多企业纷纷选择部署防泄密软件。本文将为您介绍三款且备受好评的企业加密软件,它们在市场上具有广泛的应用和良好的口碑。首先,让我们来了解一下安秉网盾加密软件。作为国内领先的加密软件提供商,安秉网盾......
  • 程序员如何避免被ai替代
    程序员不被AI替代的策略:1.持续学习和提升技能:  -关注最新技术趋势和工具,如云计算、人工智能、区块链等。  -掌握多个编程语言和框架,提升全栈开发能力。2.培养跨领域知识:  -理解行业需求,将技术应用于具体行业,如金融科技、医疗信息化等。  -学习产品设计......