峰值元素是指其值大于左右相邻值的元素。数组
给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。函数
数组可能包含多个峰值,在这种状况下,返回任何一个峰值所在位置便可。code
你能够假设 nums[-1] = nums[n] = -∞。索引
示例 1:co
输入: nums = [1,2,3,1] 输出: 2 解释: 3 是峰值元素,你的函数应该返回其索引 2。
示例 2:return
输入: nums = [1,2,1,3,5,6,4] 输出: 1 或 5 解释: 你的函数能够返回索引 1,其峰值元素为 2; 或者返回索引 5, 其峰值元素为 6。
思路:
5.若是mid对应的数值比mid+1小,那么区间[mid,r]必定有峰值
func findPeakElement(nums []int) int { if len(nums) == 1 { return 0 } if nums[0] > nums[1] { return 0 } if nums[len(nums)-1] > nums[len(nums)-2] { return len(nums) - 1 } l, r := 0, len(nums)-1 return find(nums, l, r) } func find(nums []int, l, r int) int { mid := (l + r) / 2 // 知足局部最大 if nums[mid-1] < nums[mid] && nums[mid+1] < nums[mid] { return mid } if nums[mid-1] > nums[mid] { return find(nums, l, mid) } else { return find(nums, mid, r) } }