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

在做题中学习(53): 寻找旋转数组中的最小值

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)

解法:O(logn)->很可能就是二分查找

思路:再看看题目要求,可以画出旋转之后数组中元素的大小关系:

首先,数组是具有二段性的(适配二分查找),因为原来的有序数组旋转元素挪到前面后,一定比后面的元素都要大,所以由此可以画出上图。

细节

1.以D为参照 ,判断mid落在[A,B],还是[C,D]区间内,最后如果求出[C,D]区间的左端点,也就是C,就知道了最终结果的下标。

2.以A为参照,那么最后一次旋转的元素变成数组首元素,也就是[A,B]最小的元素,但比[C,D]区间的值都要大,所以也是一种思路。[A,B]区间的值 >A,[C,D]区间的值 <A,其实还是求[C,D]区间的左端点。

3.以A为参照点时,考虑边界情况:旋转后 和 原数组 相同,那么数组首元素 > 尾元素。因为A为参照点时,是以首元素为参照,如果命中 nums[mid] >= sub 条件,则会越过最小元素。

上述两种参照点都可以解决问题,代码也都会给在下方,但注意:

根据在做题中学习(49):排序数组中查找元素的第一个和最后一个位置-CSDN博客

中有更详细的求左区间的讲解和细节问题。

1.以A为参照

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

2.以D为参照

class Solution 
{
public:int findMin(vector<int>& nums) {int left = 0,right = nums.size()-1;int back = right;while(left < right){//求区间左端点int mid = left + (right - left) /2;if(nums[mid] > nums[back])left = mid + 1;else if(nums[mid] <= nums[back])right = mid;}//走到这里,left == rightreturn nums[left];}
};

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

相关文章:

  • C#语言进阶(三) 元组
  • 实用的Chrome 浏览器命令
  • IDEA远程连接docker服务,windows版docker desktop
  • Rust 和 Go 哪个更好?
  • 【免费Java系列】大家好 ,今天是学习面向对象高级的第八天点赞收藏关注,持续更新作品 !
  • RPC 失败。curl 16 Error in the HTTP2 framing layer
  • (图论)最短路问题合集(包含C,C++,Java,Python,Go)
  • 电脑文件批量重命名不求人:快速操作,高效技巧让你轻松搞定
  • 基于springboot的网上点餐系统源码数据库
  • mysql cluster数据库集群介绍、部署及配置
  • uniapp的app端软件更新弹框
  • win11 Terminal 部分窗口美化
  • 开源go实现的iot物联网新基建平台
  • 24深圳杯ABCD成品论文47页+各小问代码+图表
  • doris经典bug
  • 贪心算法应用例题
  • 亚信科技精彩亮相2024中国移动算力网络大会,数智创新共筑“新质生产力”
  • 图像处理中的颜色空间转换
  • 网络安全之静态路由
  • Golang | Leetcode Golang题解之第74题搜索二维矩阵
  • 2023黑马头条.微服务项目.跟学笔记(五)
  • C语言 | Leetcode C语言题解之第75题颜色分类
  • 淘宝扭蛋机小程序开发:掌上惊喜,转出你的幸运宝藏
  • Oracle索引组织表与大对象平滑迁移至OceanBase的实施方案
  • 【服务治理中间件】consul介绍和基本原理
  • 无人机运营合格证:民用无人机驾驶航空器运营合格证书
  • 【编码利器 —— BaiduComate】
  • python 关键字(in)
  • 【Node.js从基础到高级运用】二十八、Node.js 内存管理浅析
  • AES加密解密