当前位置: 首页 > news >正文

【算法二十】 1​​​​​​​1​​​​​​​4. 寻找两个正序数组的中位数 153. 寻找旋转排序数组中的最小值

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

一个二分:

class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int m = nums1.length; int n = nums2.length; if(m > n){ return findMedianSortedArrays(nums2,nums1); } int iMin = 0, iMax = m; while(iMin <= iMax){ int i = iMin + (iMax - iMin)/2; int j = (m + n + 1)/2 - i; //左上大于右下,i大了,i左移 if(i!=0 && j!=n && nums1[i-1] > nums2[j]){ iMax = i-1; } //左下大于右上,i小了,i右移 else if(i!=m && j!=0 && nums2[j-1] > nums1[i]){ iMin = i+1; } //调好i和j了 else{ //求左侧最大值 int leftMax = 0; //上面左侧没有数时 if(i==0){ leftMax = nums2[j-1]; } //下面左侧没有数时 else if(j==0){ leftMax = nums1[i-1]; } //上下都有数,就要比较了 else{ leftMax = Math.max(nums1[i-1],nums2[j-1]); } //若两个数组长度和为奇数,那中位数就是左侧最大数,因为奇数,左侧会多一个数 if((m + n) % 2!=0){ return leftMax; } //偶数就要求右侧最小值,求平均值了 else{ int rightMin = 0; //i==m时 if(i==m){ rightMin = nums2[j]; } //j==n时 else if(j==n){ rightMin = nums1[i]; } else{ rightMin = Math.min(nums1[i],nums2[j]); } return (leftMax+(rightMin - leftMax)/2.0); } } } return 0.0; } }

时间复杂度:O(log(min(m,n)))

空间复杂度:O(1)

核心:通过分割线将两个数组分为左右两边相似的数量,找规律得到m+n与i和j的关系,所以只要二分出一个i,就可以得到j,通过分析几种情况得到结果

153. 寻找旋转排序数组中的最小值

二分:

class Solution { public int findMin(int[] nums) { int n = nums.length; int left = 0; int right = n - 2; // 右闭:因为我们要和最后一个数 nums[n-1] 比较,搜索范围是 [0, n-2] while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] >= nums[n - 1]) { // 如果当前值大于最后一个值,说明最小值在 mid 右侧 // 搜索区间变为 [mid + 1, right] left = mid + 1; } else { // 如果当前值小于最后一个值,说明最小值在 mid 或 mid 左侧 // 搜索区间变为 [left, mid - 1] right = mid - 1; } } // 循环结束后,left 指向的就是满足条件 nums[i] < nums[n-1] 的第一个位置 return nums[left]; } }

时间复杂度:O(logN)

空间复杂度:O(1)

核心:通过和最后一个数比较确定最小值和mid的位置方向,然后改变即可

http://www.jsqmd.com/news/463229/

相关文章:

  • 机器学习(一)-数学基础
  • JAVA学习
  • Java基础——类和对象
  • HoRain云--BIOS快速检查硬盘识别全攻略
  • 腾讯云部署 OpenClaw:云服务器真的需要图形界面(GUI)吗?顶级工程师的深度复盘
  • 企业级BI选型终极指南:2026年五大平台深度横评与关键决策指标
  • Winscope高级疑问“Invisible due to”是如何来的呢?
  • HoRain云--Python爬虫必看:NoneType错误终极解决指南
  • 3种方法:如何将PPT文件变成PPS放映格式
  • 多租户数据隔离实战:衡石科技如何保障企业级SaaS服务的数据安全?
  • 论文人狂喜!Paperxie 界面深度拆解:毕业论文初稿 + 绘图 + 排版 + AI 率,一个页面全搞定
  • HoRain云--MySQL锁机制:高并发与数据安全艺术
  • 论文写作新范式:Paperzz 如何破解毕业论文初稿、绘图、排版与 AI 率四大难题
  • 【游戏设计】潜行游戏
  • 2026 毕业论文破局指南:Paperzz 一站式搞定初稿、绘图、排版与 AI 率,告别毕业季焦虑
  • 消费增值:商业新赛道上绿色积分的“王者”
  • ssm+java2026年毕设商场后台管理系统【源码+论文】
  • 拒绝 API 堆砌:当“AI 龙虾”打破传统软件工程的确定性边界
  • 孩子沉迷手机不用愁!oppo远程管控vivo,家长高效兼顾工作和管娃
  • 音视频对齐 webrtc解决方案
  • 01---js基础
  • Python 底层调试和性能分析的高级技巧,主要用于解决 C 扩展、解释器内核级别的问题,或者对 Python 程序进行深度性能剖析
  • Matlab _ Simulink仿真设计 自动化,电气工程和电子信息相关专业仿真都可电力电子仿真,整流逆变电路仿真,电机双闭环调速、模糊 PID 仿真, LQR 仿真,风力发电、光储微电网系统、电机
  • 工业架构实战:打通MES与AGV机器人梯控系统的通信与状态机设计
  • 图像算法中难样本优化策略
  • 云端部署避坑指南:OpenClaw 3.2 接入 DeepSeek、Kimi 与通义千问的深度复盘
  • ssm+java2026年毕设商超零售送货到家购物系统【源码+论文】
  • 一文理清端口、ARP、ICMP、CDN 核心逻辑,新手也能轻松入门(兼顾通俗与专业)
  • 2026新疆中央空调优质服务商推荐指南 - 优质品牌商家
  • matlab anybody opensim包括人机耦合建模、缩放、运动学_逆动力学分析,以及自由度扩建、肌肉重建、RRA_CMC仿真,从理论到代码手把手教会运动生物力学数据代处理、辅导