题目
峰值元素是指其值大于左右相邻值的元素。
给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。
数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞。
示例 输入: nums = [1,2,3,1] 输出: 2 解释: 3 是峰值元素,你的函数应该返回其索引 2。
题解
本题采用二分查找法进行求解,进行nums[i] < nums[i+1] 判断,如果小于后一个数,那么峰值一定在i后面,否则在前面。这里等于没有特别判断,位于左右侧都可以。需要注意的是这里引用了nums[i+1],就需要对访问范围进行限制,防止越界,本题处理方法是right=nums.length - 1。
class Solution { public int findPeakElement(int[] nums) { int left = 0; int right = nums.length - 1; while(left < right){ int mid = left + (right - left) / 2; if(nums[mid] < nums[mid + 1]){ left = mid + 1; } else{ right = mid; } } return left; } }