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

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

题目:

解答:

原数组为升序,旋转的意思是将最后一个数移动到第一个数之前,进行n次。也就是旋转后的nums数组为两个升序数组(不是旋转n=nums长度次的话)寻找原来的第一个数,也就是整个数组的最小值

二分查找,红蓝染色

left=0,right=n-2,mid将数组划分为两个区间[0,mid][mid,n-1],这两个区间一定有一个是单调递增的,另一个是增减增,在最大值与最小值处出现下降。

对nums[mid]与nums[n-1]进行比较,小于则说明[mid,n-1]递增,那么最小值在[0,mid]中。不断更新mid,检查[mid,n-1]的单调性,小于说明单调,大于说明不单调,最小值在其中。

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

时间复杂度O(logn)

空间复杂度O(1)

如果需要查找最大值,可以与nums[0]比较,也可以最小值下标-1。同样的,本题也应当可以与nums[0]进行比较获得

http://www.dtcms.com/a/279430.html

相关文章:

  • 本地线程(Native Thread)、主线程(UI 线程) 和 子线程(Java 子线程)
  • Axure RP Extension for Chrome插件安装使用
  • 在 Ubuntu 上安装 vLLM:从 GPU 到 CPU 的三种方案
  • Oracle根据一张表的字段更新另一张表中的数据
  • Android 自定义路由系统
  • ServiceLibrary 库使用演示
  • [AI8051U入门第一步]环境安装和按键控制流水灯
  • 将dist文件打包成exe可执行程序
  • MySQL服务故障分析报告​​
  • 以楼宇自控系统为抓手,实现人居环境优化与建筑能效跃升
  • 职业教育领域的“101计划
  • keepalive模拟操作部署
  • 学习日志09 python
  • 【SVN】SVN 客户端的安装与操作
  • 设计模式之代理模式:掌控对象访问的优雅之道
  • CVE-2017-7525源码分析与漏洞复现(Jackson 反序列化)
  • Android 中 实现格式化字符串
  • vue2/3生命周期使用建议
  • TCL在芯片设计与验证中的应用实践
  • WinUI3开发_Combobox实现未展开时是图标下拉菜单带图标+文字
  • ConcurrentHashMap 原子操作详解:computeIfAbsent、computeIfPresent和putIfAbsent
  • 技术人生——第12集:思想为王,功能在后
  • (5)LangGraph4j框架ReActAgent实现
  • mit6.5840-lab4C-Snapshot-25Summer
  • Java Stream流详解
  • 文心一言 4.5 开源深度剖析:中文霸主登场,开源引擎重塑大模型生态
  • C++11 std::is_permutation:从用法到原理的深度解析
  • 什么是延迟双删
  • 算法训练营day18 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • 通过 ip a 查看网络接口名