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

算法---二分查找练习-2(寻找旋转排序数组中的最小值)

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

  • 1. 题目解析
  • 2. 讲解算法原理
  • 3. 编写代码

1. 题目解析

题目地址:点这里

在这里插入图片描述

2. 讲解算法原理

在这里插入图片描述
在这里插入图片描述

  1. 首先,检查数组的最后一个元素是否大于第一个元素。如果是,说明数组没有进行旋转,直接返回第一个元素作为最小值。

  2. 如果数组进行了旋转,使用二分查找的思想来找到最小元素。

  3. 初始化两个指针 left 和 right,分别指向数组的起始位置和结束位置。

  4. 进入循环,循环条件为 left < right。

  • 在每次循环中,计算中间元素的索引 mid,通过将左指针 left 和右指针 right 的差值除以2得到。

  • 检查中间元素 nums[mid] 是否同时满足以下两个条件:

    • nums[mid] < nums[mid+1]:中间元素小于其后一个元素。
    • nums[mid] < nums[0]:中间元素小于数组的第一个元素。
  • 如果满足这两个条件,说明最小元素在中间元素的左侧,将右指针 right 更新为 mid,继续搜索左侧。

  • 如果不满足上述条件,说明最小元素在中间元素的右侧,将左指针 left 更新为 mid + 1,继续搜索右侧。

  1. 当循环结束时,左指针 left 指向的位置即为最小元素的索引,返回 nums[left] 即可得到最小元素的值。

3. 编写代码

class Solution {
public:int findMin(vector<int>& nums) {if(nums[nums.size()-1]>nums[0]) return nums[0];int left=0,right=nums.size()-1;while(left<right){int mid=left+(right-left)/2;if(nums[mid]<nums[mid+1] &&nums[mid]<nums[0]) right=mid;else left=mid+1;}return nums[left];}
};

相关文章:

  • 稀碎从零算法笔记Day22-LeetCode:
  • 【类脑智能】脑网络通信模型分类及量化指标(附思维导图)
  • Spark-Scala语言实战(3)
  • Spring Boot:筑基
  • 【滑动窗口】长度最小的子数组|无重复字符的最长子串|最大连续1的个数 III|将 x 减到 0 的最小操作数
  • EPSON XV4001BC陀螺仪传感器汽车导航系统的应用
  • LabVIEW NV色心频率扫描
  • C#,图论与图算法,计算无向连通图中长度为n环的算法与源代码
  • 热插拔技术详解(中)
  • Python分析无人驾驶汽车在桂林市文旅行业推广的问卷
  • Java基础-IO流
  • neo4j使用详解(一、Linux安装)
  • 什么是Spring Boot
  • 【Greenhills】MULTI IDE-GHS最新版本Compiler 23.5.4的兼容性问题
  • 如何查看局域网内所有的ip和对应的mac地址
  • .pyc 想到的一些问题
  • 「译」Node.js Streams 基础
  • 【面试系列】之二:关于js原型
  • 【译】理解JavaScript:new 关键字
  • go append函数以及写入
  • Java的Interrupt与线程中断
  • js学习笔记
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • nodejs:开发并发布一个nodejs包
  • Otto开发初探——微服务依赖管理新利器
  • Promise初体验
  • python 装饰器(一)
  • Quartz初级教程
  • SpiderData 2019年2月13日 DApp数据排行榜
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • webpack+react项目初体验——记录我的webpack环境配置
  • 从伪并行的 Python 多线程说起
  • 工程优化暨babel升级小记
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于游标的分页接口实现
  • 计算机常识 - 收藏集 - 掘金
  • 使用agvtool更改app version/build
  • 使用Swoole加速Laravel(正式环境中)
  • 一些css基础学习笔记
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 怎样选择前端框架
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (1)(1.13) SiK无线电高级配置(六)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (LeetCode C++)盛最多水的容器
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (动态规划)5. 最长回文子串 java解决
  • (二)JAVA使用POI操作excel
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (一)Java算法:二分查找
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .htaccess配置常用技巧
  • .net core 依赖注入的基本用发