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

leetcode 二分查找·系统掌握 寻找旋转排序数组中的最小值II

题目:

题解:

本题比普通的寻找旋转排序数组中的最小值多了一个数组中的元素可以重复这一点。 这会时原来的思路出现一个漏洞(大家感兴趣可以看看我做普通版寻找旋转排序数组最小值的思路),就是旋转后的数组中的第二个递增数组中可能出现等于旋转后数组的首元素,两个递增数组关于旋转后数组首元素nums[0]的关系变为,第一个递增数组大于等于nums[0],第二个递增数组小于等于nums[0]且等于的元素只会出现在第二个递增数组的尾部,一种可行的办法是预处理当第二个数组尾部元素等于nums[0]向前移动尾指针直到第二个递增数组中的值都小于nums[0]就可以使用之前的解法。

int findMin(vector<int>& nums) {int l=0,r=nums.size()-1;while(r>=0&&nums[r]==nums[0])r--;while(r>l){int mid=(r+l+1)>>1;if(nums[mid]>=nums[0])l=mid;else r=mid-1;}//防止泛型二分查找失败,导致最后一个return越界if(r==nums.size()-1)return nums[0];return min(nums[0],nums[r+1]);}

题后反思:

泛型二次查找会出现查找”失败的情况“:当查找对象中全是0或者1的时候。当r,l指针是元素的位置的时候,最好不要直接在查找之后的值上进行操作因为在查找失败后的操作容易越界。所以使用泛型二分查找后要判断一下是否查找成功。

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

相关文章:

  • Flink 容错
  • OpenAI策略:指令层级系统让大模型免于恶意攻击
  • 芝麻清单助力提升学习工作效率 专注时间完成有效的待办事项
  • Docker 容器操作命令
  • 华为配置创建vlan及划接口,trunk干道,DHCP池塘配置
  • vue3 computed与watch,watchEffect比较
  • 论文:R语言数据分析之机器学习论文
  • 【C++】STL中优先级队列的使用与模拟实现
  • C#开发-集合使用和技巧(二)Lambda 表达式介绍和应用
  • Qt底层原理:深入解析QWidget的绘制技术细节(2)
  • 【Gradio】表格数据科学与图表-连接到数据库
  • 艾多美用“艾”为生命加油,献血活动回顾
  • 人工智能在气象预报领域的崛起:GraphCast引领新纪元
  • http和https的区别在哪
  • windows10远程桌面端口,Windows 10远程桌面端口修改的两个方法
  • 力扣1504.统计全1子矩形
  • vue3高德地图组件化,解决复用地图组件时渲染失败问题
  • Langchain 如何工作
  • 【数据结构】顺序表实操——通讯录项目
  • C++继承与多态—多重继承的那些坑该怎么填
  • 论文阅读:基于谱分析的全新早停策略
  • 1.接口测试-postman学习
  • 2024年码蹄杯本科院校赛道初赛(省赛)
  • PHP蜜语翻译器在线文字转码解码源码
  • 安卓浏览器区分启动、打开、分享
  • C/C++ 数组负数下标
  • 钓鱼网站开发原理(社会工程学)
  • 如何优雅地使用 console.log 打印数组或对象
  • 模式分解的概念(下)-无损连接分解的与保持函数依赖分解的定义和判断、损失分解
  • vue3父组件获取子组件的实例对象