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

embedded/2024/12/23 4:11:14/

题目
给定两个大小分别为 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.ppmy.cn/embedded/44009.html

相关文章

Atlas 血缘分析-hive/spark

Apache Atlas部署安装 这里需要注意&#xff0c;需要从官网下载Atlas的源码&#xff0c;不要从git上分支去checkout&#xff0c;因为从分支checkout出来的代码&#xff0c;无法正常运行&#xff0c;这里小编使用针对Atlas-2.3.0源码进行编译. mvn clean -DskipTests package …

2024.5.21力扣刷题记录-二分算法篇

目录 一、35. 搜索插入位置 1.二分内置函数 2.二分 二、704. 二分查找 1.二分 2.二分2 三、744. 寻找比目标字母大的最小字母 四、2389. 和有限的最长子序列 1.滑动窗口排序(没过) 2.前缀和 二分 排序 五、1170. 比较字符串最小字母出现频次 1.哈希表 二分 2.后…

[猫头虎分享21天微信小程序基础入门教程] 第20天:小程序的多媒体功能与图像处理

[猫头虎分享21天微信小程序基础入门教程] 第20天&#xff1a;小程序的多媒体功能与图像处理 第20天&#xff1a;小程序的多媒体功能与图像处理 &#x1f3a8; 自我介绍 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师。今天我们继续微信小程序的学习&#xff…

NSSCTF-Web题目4

[SWPUCTF 2021 新生赛]hardrce 1、题目 2、知识点 rce&#xff1a;远程代码执行、url取反编码 3、解题思路 打开题目 出现一段代码&#xff0c;审计源代码 题目需要我们通过get方式输入变量wllm的值 但是变量的值被过滤了&#xff0c;不能输入字母和\t、\n等值 所以我们需…

CLIP论文学习

学习来自B站bryanyzhu

【ESP32之旅】ESP32 PlatformIO 固件单独烧录

背景 有时候使用PIO编写的代码需要发给客户去验证&#xff0c;相比较于发送源码直接发送bin文件&#xff0c;更加的安全而且高效。不用担心源码的泄漏&#xff0c;也不用帮客户配置PIO环境。 操作方法 1.编译 首先进行代码编译&#xff0c;如编译成功会在 .pio\build\airm2…

Nginx中的limit_req模块和limit_conn模块详解

引言 在高流量场景下&#xff0c;良好的限流和连接控制策略至关重要&#xff0c;以防止服务器过载&#xff0c;确保服务稳定性和高可用性。Nginx 提供了 limit_req 和 limit_conn 模块&#xff0c;用以实现请求频率和并发连接数的限制。本文将详细介绍这两个模块的生效阶段和生…

【一站式学会Kotlin】第八节:kotlin== 和 === 的差别和含义

作者介绍&#xff1a; 百度资深Android工程师T6&#xff0c;在百度任职7年半。 目前&#xff1a;成立赵小灰代码工作室&#xff0c;欢迎大家找我交流Android、微信小程序、鸿蒙项目。 一&#xff1a;通俗易懂的人工智能教程&#xff1a;https://www.captainbed.cn/nefu/ 点一下…