题目
峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组
nums
,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设
nums[-1] = nums[n] = -∞
。你必须实现时间复杂度为
O(log n)
的算法来解决此问题。
解题思路
- 以较大的值为基准寻找另一侧的值;
- 因为左右的边界默认为负无穷,所以在较大值的另一侧一定存在峰值。
代码展示
class Solution { public int findPeakElement(int[] nums) { int left = 0; int right = nums.length - 1; while (left < right) { int mid = (left + right) / 2; if(nums[mid] > nums[mid + 1]){ right = mid; } else { left = mid + 1; } } return right; } }