题目描述
峰值元素是指其值大于左右相邻值的元素。
给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。
数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞。
说明:
你的解法应该是 O(logN) 时间复杂度的。
思路分析
- O(N)。遍历所有元素,找到max或者找到大于前后元素的元素。
- O(N)。
- 因为 nums[-1] 为负无穷,所以 nums[0] > nums[-1],如果 nums[0] < nums[1] 则 nums[0] 就是峰值。
- 对索引1的元素而言,只用判断后一个位置的元素。
- 所以将程序化简为遍历所有元素,找到 nums[i] < nums[i+1] 的元素。
- O(logN),看到这个就要用二分。
- 套用模板,主要是在判断语句该怎么写。
- 根据上一个分析,我们将 i 和 i+1 作比较,这里也是一样。
- 若 nums[i] > nums[i+1]则峰值在 i 之前;
- 若 nums[i] < nums[i+1]则峰值在 i+1 之后。
代码实现
public st