leetcode-162寻找峰值

【中等】力扣算法题解析LeetCode162:寻找峰值 这篇题解介绍了如何在整数数组中寻找峰值元素的问题。给定一个整数数组,找到任意一个峰值元素(严格大于相邻元素)的索引。要求时间复杂度为O(log n)。 解题思路:使用二分查找算法,通过比较中间元素与其右侧元素的值来决定搜索方向。若中间元素小于右侧元素,说明峰值在右侧;否则可能在左侧或当前元素即为峰值。 阅读详情

leetcode刷题

162. 寻找峰值
题目

峰值元素是指其值严格大于左右相邻值的元素。

给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。

你可以假设 nums[-1] = nums[n] = -∞ 。

你必须实现时间复杂度为 O(log n) 的算法来解决此问题。

nums[i] != nums[i + 1]

分析

本文的问题是找到任何一个峰值即可。所以使用二分法需要判断哪部分区域存在峰值。

对于nums[mid],存在两种可能

  1. mid为峰值点,直接返回即可

  2. mid不为峰值点,即两侧一个大于nums[mid],一个小于nums[mid]

    针对于上升的一侧,如果往上升方向一直升序,则终点为峰值;如果出现第一个降序的转折点,则那个点为峰值点

    所以mid上升方向一定会存在峰值点

代码
public int findPeakElement(int[] nums) {
    if (nums.length==1)
        return 0;
    if (nums.length==2){
        return nums[1]>nums[0] ? 1 : 0;
    }
    int left=0;
    int right = nums.length-1;
    int mid;
    while(left<=right){
        mid = (left + right) / 2;
        if ((mid==0 && nums[mid]>nums[mid+1]) || (mid==nums.length-1 && nums[mid]>nums[nums.length-2]) || ( mid>0 && mid<nums.length-1 && nums[mid]>nums[mid-1] && nums[mid]>nums[mid+1])){
            return mid;
        }
        else if (nums[mid+1]>nums[mid]){
            left = mid+1;
        }
        else{
            right = mid-1;
        }
    }
    return -1;
}
结果

时间超过100.00%

内存超过81.78%

【Leetcode】162.寻找峰值 二分法找峰值 阅读详情

相关推荐

Python与西门子PLC数据交互实战:基于Snap7的跨平台工业通信指南

本文详细介绍了如何使用Python和Snap7库实现与西门子PLC的数据交互。内容涵盖跨平台环境搭建、连接参数配置、数据读写实战及性能优化技巧,为工业自动化、数据采集和智能制造场景提供了一套轻量、灵活且高效的通信解决方案。

vim8coder的博客 287

经典算法题:寻找峰值

题目 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设nums[-1] = nums[n] = -∞。 示例 1: 输入: nums = [1,2,3,1] 输出: 2 解释: 3 是峰值元素,你的函数应该返回其索引 2。 示例2: 输入: nums = [1,2,1,3,5,6,4] 输出: 1 或 5 解释: 你的...

3098

2023东华大学机试OJ进阶版1-81题

先排序。每次找两个最小的数,把其中一个置为两数之和,并累加这个和值,另一个数置为-1,然后再排序,重复操作,直到只剩下一个数。105。

m0_49263811的博客 2796

力扣 LeetCode 162. 寻找峰值

题目要求返回任意一个峰值即可。

qq_61504864的博客 377

ArduSub程序学习(1)——ardupilot框架整理

AP_HAL层(硬件抽象层)是我们制作 ArduPilot 的方式可移植到许多不同的平台。有一个顶级AP_HAL libraries/AP_HAL,用于定义代码其余部分的接口 有针对具体的板子特性,然后就有了AP_HAL_XXX 子目录,例如,AP_HAL_AVR 用于基于 AVR 的 开发板,AP_HAL_PX4用于 Pixhawk 开发板和 AP_HAL_Linux 基于 Linux 开发板。工具目录tools directories工具目录是杂项支持目录。

weixin_49839886的博客 2816

Simulink封装与库的建立

第二栏设置标签,第三栏是对应变量名,即是第一张图中的常量名。1.先将输入与常量模块相连接并生成子系统。按照如图所示添加修改,最后的效果如下图。封装子系统搭建测试环境。

lensyu1994的博客 1742

leetcode 162 寻找峰值

162 寻找峰值 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 示例 1: 输入: nums = [1,2,3,1] 输出: 2 解释: 3 是峰值元素, 示例 2: 输入...

求知若饥,谦卑若愚 259

告别手册!S32K3XX的eMIOS实战:从GPT定时到PWM输出,一个通道搞定电机控制

本文深入探讨了NXP S32K3XX系列MCU的eMIOS模块在电机控制中的高效应用。通过单通道实现PWM生成、输入捕获和定时中断三大功能,展示了如何简化BLDC电机控制硬件设计。文章结合RTD库与寄存器级编程,提供动态模式切换和性能优化方案,显著降低CPU负载。

weixin_42522374的博客 147

leetcode 力扣 162.寻找峰值

题目: 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 示例 1: 输入: nums = [1,2,3,1] 输出: 2 解释: 3 是峰值元素,你的函数应该返回其索引 2。 示例 2: 输入:nums = [1,2,1,3,5,6,4] 输出: 1 或 5 解释: 你的函数可

LifeGoesOn 321

ffmpeg(一) ffmpeg+QT开发环境搭建

(exe 程序编译的时候只需要包含 xxx.dll.a 静态导入库,运行的时候才需要 xxx.dll 文件)这个 .pro 文件的配置,是指导程序编译的时候,可以找到对应的动态库。值得一提的是,在Windows中,静态链接库(Static Link Library)的扩展名也是.lib、.dll.a。其实只要你掌握了FFmpeg,也可以很快上手其他音视频开发库,因为底层原理都是一样的,你最终操作的都是一样的数据,比如MP3、MP4文件。导入库:不包含函数的具体实现代码(函数的具体实现代码存储在dll中)

小道士写程序 8204

【swjtu】算法实验2.4分析算法时间复杂度

分析给定算法的时间复杂度。 上机实验,绘制不同输入情况下的运行时间曲线,并与(1)中的分析结果进行比较。 撰写相应的实验报告,实验报告内容包括:实验目的、实验任务、 实验环境、实验步骤、实验结果及其分析以及实验总结等部分内容。

qq_52046937的博客 731

【LeetCode题解】LeetCode 162. 寻找峰值

函数,它直接定义了“如何根据中间位置的特征,判断下一阶段的搜索方向”。由于每道题的场景逻辑不同,真正的破题点永远是 结合问题条件,分析区间的“可二分性”,而非机械套用模板。二分算法的两类模板需要熟练掌握,但核心关键在于设计合理的。(即使数组严格递增,最后一个元素因右侧是。严格递减则第一个元素因左侧是。核心逻辑是:通过比较中间位置。这一条件至关重要:它保证了。的元素,且题目给定边界条件。由于要求时间复杂度为。

weixin_53552267的博客 841

SAP_MM模块-服务类采购详细讲解案例

SAP_MM模块服务类采购订单配置及业务测试案例详解,包括前台业务操作、后台配置以及使用过程中的问题处理

风沙的博客 5125

LeetCode(力扣) 162. 寻找峰值

二分法解决 LeetCode(力扣) 162. 寻找峰值

qq_56048661的博客 475

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

leetcode 162. 寻找峰值

162. 寻找峰值 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 示例 1: 输入: nums = [1,2,3,1] 输出: 2 解释: 3 是峰值元素,你的函数应该返回其索引 2。 示例 2: 输入: nums = [1,2,1,3,5,6,4] 输出: 1 或 5 解释: 你的函

Qin_酱的博客 310

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LeetCode 162. 寻找峰值

更多题解尽在每日更新。组队打卡,更多解法等你一起来参与哦!,难度。

m0_64381458的博客 244

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Leetcode 162. 寻找峰值 C++

Leetcode 162. 寻找峰值 题目 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 测试样例 示例 1: 输入: nums = [1,2,3,1] 输出: 2 解释: 3 是峰值元素,你的函数应该返回其索引 2。 示例 2: 输入: nums = [1,2,1,3,5,6,4]

weixin_43750513的博客 323

Leetcode—162.寻找峰值【中等】

运行结果 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

Atticus的博客 500

二分查找-162.寻找峰值-力扣(LeetCode)

black_bear_white的博客 498

【leetcode】162. 寻找峰值

.峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-peak-e...

Gin.TaMa的博客 198

162. 寻找峰值 - 力扣(LeetCode)

题目描述 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 示例 1: 输入: nums = [1,2,3,1] 输出: 2 解释: 3 是峰值元素,你的函数应该返回其索引 2。...

Onwaier的博客 468

Leetcode162 寻找峰值,C++,Java,Python

Leetcode162 寻找峰值 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-peak-element/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元...

Rp的博客 699

力扣 LeetCode - 162. 寻找峰值

162. 寻找峰值 题目: 峰值元素是指其值大于左右相邻值的元素。 给你一个输入数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设nums[-1] = nums[n] = -∞ 。 示例 1: 输入:nums = [1,2,3,1] 输出:2 解释:3 是峰值元素,你的函数应该返回其索引 2。 示例2: 输入:nums = [1,2,1,3,5,6,4] 输出:1 或 5 解释:你的函数可以返回索引 1,...

qq_35546113的博客 262

LeetCode162. 寻找峰值

LeetCode162. 寻找峰值 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞ 。 你必须实现时间复杂度为 O(log n) 的算法来解决此问题。 示例 1: 输入:nums = [1,2,3,1] 输出:2 解释:3 是峰值元素,你的函数应该返回其索引 2。 示例 2: 输入:nums = [1,2,1,3,5,6,4]

yikeshouliudan的博客 327

LeetCode第162题—寻找峰值—Python实现

title: LeetCode No.162 categories: OJ LeetCode tags: Programing LeetCode OJ LeetCode第162题—寻找峰值 前几天老忘了更新,我错了。QAQ 最新研究一下VSCode刷LeetCode好方便好舒服。 自己代码的开源仓库:click here 欢迎Star和Fork ???? 题目描述 峰值元素是指其值大于左右相邻值的元素。 给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返

StriveZs'Blog 628

LeetCode第162题 - 寻找峰值

LeetCode第162题 - 寻找峰值

流水账 1195
上一篇: leetcode-153寻找旋转排序数组中的最小值
下一篇: leetcode-713乘积小于 K 的子数组
奇迹静静~
博客等级 码龄9年 5粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值