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

二分查找----5.寻找旋转排序数组中的最小值

题目链接

 

/**

        数组在某处进行旋转,分割为两个独立的递增区间,找出数组的最小值;特殊情况:若旋转次数是数组长度的倍数,则数组不变

        特点:

            常规情况:

                数组被分割为两个独立的子区间,左半区的最小值大于右半区的最大值

                依据数组长度,mid可能落在左半区也有可能落在右半区,最小值在右半区

            特殊情况:

                旋转次数是数组长度的倍数,则数组不变

                此时数组是一个完整的递增区间,取第一个元素即可

        二分策略:

            若left与right已经在一个递增区间中,则直接返回nums[left]即可;本身就是一个递增区间,或经过收缩left来到了右半区。

            若不在一个区间中,则判断mid所在半区;在左半区则淘汰[left,mid],在右半区则淘汰[mid,right]

            经过收缩后再重新判断left,right是否在同一区间,在则直接返回结果,不在则重复上述流程再次收缩

        判断条件:

            nums[left] <= nums[mid] && nums[mid] <= nums[right] ---> [left,right]已经在同一区间,直接返回结果即可

            仅满足:nums[left] <= nums[mid] ---> [left,right]不单调,且mid在左半区; 淘汰[left,mid]

            均不满足,[left,right]不单调,且mid在右半区; 淘汰[mid,right)

*/

class Solution {/**数组在某处进行旋转,分割为两个独立的递增区间,找出数组的最小值;特殊情况:若旋转次数是数组长度的倍数,则数组不变特点:常规情况:数组被分割为两个独立的子区间,左半区的最小值大于右半区的最大值依据数组长度,mid可能落在左半区也有可能落在右半区,最小值在右半区特殊情况:旋转次数是数组长度的倍数,则数组不变此时数组是一个完整的递增区间,取第一个元素即可二分策略:若left与right已经在一个递增区间中,则直接返回nums[left]即可;本身就是一个递增区间,或经过收缩left来到了右半区。若不在一个区间中,则判断mid所在半区;在左半区则淘汰[left,mid],在右半区则淘汰[mid,right]经过收缩后再重新判断left,right是否在同一区间,在则直接返回结果,不在则重复上述流程再次收缩判断条件:nums[left] <= nums[mid] && nums[mid] <= nums[right] ---> [left,right]已经在同一区间,直接返回结果即可仅满足:nums[left] <= nums[mid] ---> [left,right]不单调,且mid在左半区; 淘汰[left,mid]均不满足,[left,right]不单调,且mid在右半区; 淘汰[mid,right)*/public int findMin(int[] nums) {//双指针置于有效部分两端int left = 0, right = nums.length - 1;while(left <= right) {int mid = (left + right) >>> 1;//[left,right]已收缩至右半区直接返回结果即可if(nums[left] <= nums[mid] && nums[mid] <= nums[right]) {return nums[left];}//[left,right]不单调,且mid在左半区else if(nums[left] <= nums[mid]) { left = mid + 1; //淘汰[left,mid]}//[left,right]不单调,且mid在右半区else {right = mid; //淘汰[mid,right) ---> mid恰好为右半区第一个元素,避免错失最小值}}return -1;}
}

http://www.lryc.cn/news/598069.html

相关文章:

  • fabric搭建基础的测试网络
  • ARM 学习笔记(四)
  • 若依框架在 IDEA 中运行的前置软件环境配置指南
  • AI开放课堂:钉钉MCP开发实战
  • 4种灵活的方法从POCO手机中删除联系人
  • 移动管家手机控车便捷性如何
  • 数据库集群环境漏洞修复
  • uniapp写app做测试手机通知栏展示内容
  • AI结对编程:分布式团队的集体记忆外脑
  • TechGPT3部署
  • 初识opencv03——图像预处理2
  • 中国西北典型绿洲区土壤水分特征(2018-2019年)
  • 前端面试专栏-前沿技术:30.跨端开发技术(React Native、Flutter)
  • LeetCode 1695.删除子数组的最大得分:滑动窗口(哈希表)
  • 智慧工厂网络升级:新型 SD-WAN 技术架构与应用解析
  • 【Git知识】Git 常用知识集合之基础--分支系统与 Tag 标签机制
  • Leetcode 07 java
  • CodeBuddy IDE发布:编程新时代的颠覆者?
  • Golang实现 - 实现只有表头的 Excel 模板,并在指定列添加了下拉框功能。生成的 Excel 文件在打开时,指定列的单元格会显示下拉选项
  • 安全逆向工程学习路线
  • Java学习第七十一部分——Dubbo
  • RCLAMP0512TQTCT 升特半导体 TVS二极管 12通道全防护芯片 以太网/PLC控制/5G基站专用
  • 数学基础弱能学好大数据技术吗?
  • 仓库解读 - OpenExo
  • 滑动窗口-5
  • 企业安全基石:解锁等保测评的战略价值
  • TRUMPF TruConvert DC 1008 – 1010 TruConvert System Control 逆变器
  • 【图像理解进阶】如何进行小目标物体的检测?
  • 快乐社兑换码怎么获得,免排队,
  • LLM中典型的Transformer层中:MLP Residual; LN Agg: μ, σ; SM Agg 是什么意思