【Leetcode每日一题】二分查找 - 山脉数组的峰顶索引(难度⭐⭐)(23)

1. 题目解析

Leetcode链接:852. 山脉数组的峰顶索引

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

核心在于找到题目中所说的峰值所在的下标并返回他们的下标即可。

2. 算法原理

峰顶及两侧数据特点分析

峰顶数据特点

  • 峰顶位置 arr[i] 的值大于其前后两个位置的值,即 arr[i] > arr[i - 1] 且 arr[i] > arr[i + 1]

峰顶左侧数据特点

  • 峰顶左侧的数据呈现上升趋势,即 arr[i] 的值大于其左侧位置的值 arr[i - 1],但小于其右侧位置的值 arr[i + 1]

峰顶右侧数据特点

  • 峰顶右侧的数据呈现下降趋势,即 arr[i] 的值小于其左侧位置的值 arr[i - 1],但大于其右侧位置的值 arr[i + 1]
根据 mid 位置信息的搜索策略

上升趋势

  • 若 mid 位置的数据呈现上升趋势,则接下来应在 [mid + 1, right] 区间内继续搜索峰顶。

下降趋势

  • 若 mid 位置的数据呈现下降趋势,则接下来应在 [left, mid - 1] 区间内搜索峰顶。

峰顶位置

  • 若 mid 位置恰好是峰顶,则直接返回该位置作为结果。

3. 代码编写 

class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {int l = 0, r = arr.size() - 1, m = -1;while(l < r){m = (l + r) / 2;if(arr[m] > arr[m + 1]) r = m;else l = m + 1;}return r;}
};

The Last

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505398.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实时显示,无需等待!这个工具好玩又好用

今天介绍一个实时打字翻译项目&#xff0c;名字叫做"Real-time Translation Typing" &#xff0c;这个项目的目标是创建一个能够实时翻译和打字的软件&#xff0c;这意味着用户可以输入一种语言&#xff0c;而系统会立刻以另一种语言显示文本。这样的工具对于需要跨语…

数据增加

目录 增加数据 实现数据增加&#xff0c;保存新的内容 注意 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 增加数据 由于 emp 表中的数据对日后的开发依然有用处&#xff0c;所以在讲解更新之前 建议将emp 表数据做一个复制。将…

本地项目如何上传到gitee

文章目录 一、在gitee上新建远程仓库二、初始化本地仓库三、执行git命令上传代码 一、在gitee上新建远程仓库 仓库名称必填&#xff0c;路径自动跟仓库名称保持一致 解释说明&#xff1a; 仓库名称&#xff1a;必填&#xff0c;每个仓库都需要有一个名称&#xff0c;同一个码…

HCIA-Datacom实验指导手册:8 网络编程与自动化基础

HCIA-Datacom实验指导手册&#xff1a;8 网络编程与自动化基础 一、实验介绍&#xff1a;二、实验拓扑&#xff1a;三、实验目的&#xff1a;四、配置步骤&#xff1a;步骤 1 完成交换机的 Telnet 预配置步骤 2 Python 代码编写 五、结果验证六、windows 计划任务程序配置七、 …

gofly框架接口入参验证使用介绍

接口传入的参数做相关性质验证是开发中较为常用&#xff0c;gofly框架内置校验工具&#xff0c;提供开发效率&#xff0c;开发接口简单调用即可实现验证&#xff0c;下面介绍gofly框架数据验证设计思路及使用方法。 gofly框架提供了功能强大、使用便捷、灵活易扩展的数据/表单…

了解 SYN Flood 攻击

文章目录&#xff1a; 什么是 SYN Flood 攻击&#xff1f;对网络的影响SYN Flood 发生的迹象如何解决&#xff1f; 什么是 SYN Flood 攻击&#xff1f; SYN Flood&#xff08;SYN 洪水攻击&#xff09;是一种常见的分布式拒绝服务&#xff08;DDoS - Distributed Denial of Se…

win安装卸载python3.13

一、安装 访问python官网&#xff1a;https://www.python.org/ 点击“Downloads” 点击“Windows” 找到自己要下载的版本和位数&#xff0c;比如我这个是3.13版本、64位的安装包 下载好了之后&#xff0c;双击安装包 勾选“Add python.exe to PATH”&#xff1a;把python环…

Numpy计算报错:RuntimeWarning: invalid value encountered in true_divide

问题 RuntimeWarning: invalid value encountered in divide 原因 可能是在计算时&#xff0c;存在缺失值的像元&#xff0c;各波段都为0&#xff0c;导致做除法分母为0&#xff0c;numpy计算不成功 解决方法 在计算之前添加一句设定 np.seterr(divideignore, invalidig…

sora笔记(一):sora前世今生与技术梗概

:::info &#x1f4a1; 近日&#xff0c;OpenAI发布了视频生成模型Sora&#xff0c;最大的Sora模型能够生成一分钟的高保真视频。同时 OpenAI称&#xff0c;可扩展的视频生成模型&#xff0c;是构建物理世界通用模拟器的一条可能的路径。 **&#x1f4c3; **Sora能够生成横屏1…

LeetCode --- 长度最小的子数组(滑动窗口)

前言 滑动窗口算法是一种用于解决数组或者列表中子数组或者字串问题的方法&#xff0c;通常用于在给定数据上执行连续区间的操作&#xff0c;算法基本思想是维护一个固定大小或不定大小的窗口&#xff0c;通过移动窗口的起始位置和结束位置来遍历整个数据。在每个窗口位置&…

多态——细致讲解

&#x1f536;多态基础概念  &#x1f536;概念   &#x1f531;多态性   &#x1f531;多态——重新(覆盖)  &#x1f536;示例   &#x1f536;基本使用方法   &#x1f536;特例    &#x1f531;协变    &#x1f531;析构函数重写  &#x1f531;多态原理…

LaTeX-设置表格大小

文章目录 LaTeX-设置表格大小1.创建表格2.设置表格的宽度2.1控制表格每一列的宽度2.2控制整个表格的宽度 3.设置表格的外观4.LaTeX绘制三线表 LaTeX-设置表格大小 本文介绍了LaTeX如何设置表格的大小、改变表格的外观以及如何绘制三线表。 1.创建表格 在LaTeX中创建表很耗时…