寻找峰值
问题简述
给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。
1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于
2.假设 nums[-1] = nums[n] = -inf
3.对于所有有效的 i 都有 nums[i] != nums[i + 1]
进阶:时间复杂度 O(logN)
思路1:遍历
注意问题中假设左右边界为负无穷,因此当数组中只有一个或两个元素时也是存在答案的;
思路2:找最大值
根据问题定义,最大值必定是答案之一
思路3:二分(最佳)
可以通过比较
nums[m]
和nums[m + 1]
可以确定所在位置是“上坡”还是“下坡”;注意:二分有效的前提是
对于所有有效的 i 都有 nums[i] != nums[i + 1]
;
Last updated