
leetcode题解162-寻找峰值
初始化指针:左指针 循环条件:持续进行查找,直到找到峰值或者退出循环。 计算中间值:每次计算中间值 调整指针:如果 返回结果:当找到的索引满足峰值元素的条件时,返回此索引。
发布日期:2025-04-05 05:11:55
浏览次数:12
分类:精选文章
本文共 1021 字,大约阅读时间需要 3 分钟。
在解决这个问题时,我们需要找到数组中的一个峰值元素,并返回其索引。峰值元素定义为其值大于左右相邻元素的值。假设数组的两端是负无穷大,这意味着至少存在一个峰值元素。
方法思路
为了高效地找到峰值元素,我们可以使用二分查找算法。二分查找的时间复杂度为O(logN),能够在对数时间内解决问题,非常适合处理较长的数组。
以下是详细的步骤解释:
left
设为0,右指针right
设为数组长度减1。mid
,比较nums[mid]
和nums[mid+1]
的大小。nums[mid]
大于nums[mid+1]
,说明有一个峰值在左边侧,调整右指针right
到mid
。如果nums[mid]
小于或等于nums[mid+1]
,说明有一个峰值在右边侧,调整左指针left
到mid+1
。解决代码
class Solution { public int findPeakElement(int[] nums) { int n = nums.length; int left = 0; int right = n - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] < nums[mid + 1]) { left = mid + 1; } else { right = mid - 1; } } return left; }}
代码解释
- 初始化:左指针
left
从数组起始位置开始,右指针right
从数组末尾位置开始。 - 循环查找:按二分查找的方法进行查找,计算中间值
mid
。 - 比较判断:如果当前中间值小于右边值,说明峰值在右边,调整左指针。反之,调整右指针。
- 终止条件:当
left
超过right
时,循环结束,此时left
指针的值即为找到的峰值索引。
这种方法利用了二分查找在数组中找峰值的特性,能够在对数时间内高效解决问题,适用于长度较大的数组。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月18日 06时43分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!