0852. 山脉数组的峰顶索引
大约 1 分钟
0852. 山脉数组的峰顶索引
- 标签:数组、二分查找
- 难度:中等
题目链接
题目大意
描述:给定由整数组成的山脉数组 。
要求:返回任何满足 $arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[len(arr) - 1] $ 的下标 。
说明:
- 山脉数组:满足以下属性的数组:
- ;
- 存在 (),使得:
- ;
- 。
- 题目数据保证 是一个山脉数组
示例:
- 示例 1:
输入:arr = [0,1,0]
输出:1
- 示例 2:
输入:arr = [0,2,1,0]
输出:1
解题思路
思路 1:二分查找
- 使用两个指针 、 。 指向数组第一个元素, 指向数组最后一个元素。
- 取区间中间节点 ,并比较 和 的值大小。
- 如果 ,则右侧存在峰值,令
left = mid + 1
。 - 如果 ,则左侧存在峰值,令
right = mid
。
- 如果 ,则右侧存在峰值,令
- 最后,当 时,跳出循环,返回 。
思路 1:代码
class Solution:
def peakIndexInMountainArray(self, arr: List[int]) -> int:
left = 0
right = len(arr) - 1
while left < right:
mid = left + (right - left) // 2
if arr[mid] < arr[mid + 1]:
left = mid + 1
else:
right = mid
return left
思路 1:复杂度分析
- 时间复杂度:。
- 空间复杂度:。