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

【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.lryc.cn/news/309002.html

相关文章:

  • Linux添加用户分组练习
  • 云快充充电桩系统设计书
  • oracle DG 原理
  • MySQL篇—持久化和非持久化统计信息介绍(第一篇,总共三篇)
  • Leetcode—65. 有效数字【困难】
  • 【Java程序设计】【C00322】基于Springboot的高校竞赛管理系统(有论文)
  • 41、网络编程/TCP.UDP通信模型练习20240301
  • Python中操作MySQL和SQL Server数据库的基础与实战【第97篇—MySQL数据库】
  • 【兔子机器人】五连杆运动学解算与VMC(virtual model control)
  • 学习鸿蒙基础(6)
  • 标准PoE交换机、非标准PoE交换机和非PoE交换机三者到底有何区别?
  • 【软件测试】--功能测试4-html介绍
  • 模型优化_XGBOOST学习曲线及改进,泛化误差
  • Java8 - LocalDateTime时间日期类使用详解
  • 3D城市模型可视化:开启智慧都市探索之旅
  • 某查查首页瀑布流headers加密
  • Microsoft Visio 文本框上标或下标
  • Java项目:29 基于SpringBoot+thymeleaf实现的图书管理系统
  • Unity游戏项目中的优化之摄像机视锥体剔除优化
  • 超1000本计算机经典书籍分享(均可免费下载)
  • AI大模型提供商有哪些?
  • 【Linux】部署单机项目(自动化启动)
  • MySQL:使用聚合函数查询
  • 【Linux C | 网络编程】套接字选项、getsockopt、setsockopt详解及C语言例子
  • Springboot解决模块化架构搭建打包错误找不到父工程
  • Android全屏黑边解决方案
  • 【矩阵】【方向】【素数】3044 出现频率最高的素数
  • 什么是RPC?谈谈你对RPC的理解
  • C语言实现哈希查找之线性探测算法
  • js:lodash template文件模板语法和应用