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

【Leetcode每日一题】二分查找 - 寻找旋转排序数组中的最小值(难度⭐⭐)(22)

1. 题目解析

Leetcode链接:153. 寻找旋转排序数组中的最小值

这个题目乍一看很长很复杂,又是旋转数组又是最小值的

但是仔细想想,结合题目给的示例,不难看出可以用二分的方法来解决

核心在于找到给定数组里面的最小值


2. 算法原理

题目规定的数组规则如下图所示:

我们的目标是找到一个特定的点C。

从给定的图像中,我们观察到在区间[A,B]内的所有点的值都严格大于D点的值,而C点的值则严格小于D点的值。但需要注意的是,当区间[C,D]只包含一个元素时,C点的值有可能等于D点的值。

因此,我们初始化两个指针,left和right,分别代表搜索区间的左右边界。接着,根据中间点mid的值与D点值的比较结果,我们可以确定下一次搜索的区间:

  • 如果mid位于[A,B]区间内,即mid的值严格大于D点的值,那么下一次搜索区间将缩小为[mid + 1,right]。
  • 如果mid位于[C,D]区间内,即mid的值小于或等于D点的值,那么下一次搜索区间将缩小为[left,mid]。

当搜索区间的长度缩减为1时,我们就找到了所需的点C。


3. 代码编写

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

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~

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

相关文章:

  • QT C++实战:实现用户登录页面及多个界面跳转
  • 我的世界游戏服务器平台推荐哪里找?
  • 用于制作耳机壳的倒模专用UV树脂有什么特点?
  • 将c、c++变为python
  • golang学习7,glang的web的restful接口结构体传参
  • python模型训练
  • 逆向案例三:动态xhr包中AES解密的一般步骤,以精灵数据为例
  • 超越CPU和GPU:引领AI进化的LPU
  • MySQL 逗号分隔查询--find_in_set()函数
  • 【物联网应用案例】智能农业的 9 个技术用例
  • 前端开发——ElementUI组件的使用
  • Unity编写Shader内置各种矩阵和方法介绍
  • 初学者如何使用QT新建一个包含UI界面的C++项目
  • 韦东山嵌入式Liunx入门驱动开发四
  • ubuntu基础操作(1)-个人笔记
  • Spring Cloud2022之OpenFeign使用以及部分源码分析
  • 【非比较排序】计算排序算法
  • 数据结构与算法 - 数组与二分查找 + Leetcode典型题
  • SQL进阶(三):Join 小技巧:提升数据的处理速度
  • 开发知识点-.netC#图形用户界面开发之WPF
  • 基于springboot实现流浪动物救助网站系统项目【项目源码+论文说明】
  • 灰度负载均衡和普通负载均衡有什么区别
  • 【二分查找】朴素二分查找
  • Windows Docker 部署 Redis
  • 什么是VR虚拟现实|虚拟科技博物馆|VR设备购买
  • 高性能API云原生网关 APISIX安装与配置指南
  • Gradio Dataframe 学习笔记
  • 深入理解计算机系统笔记
  • 300分钟吃透分布式缓存(拉钩教育总结)
  • 2024亚马逊全球开店注册前需要准备什么?