0852. 山脉数组的峰顶索引 #
- 标签:数组、二分查找
- 难度:简单
题目大意 #
给定由整数组成的山脉数组 arr
。
要求:返回任何满足 arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[len(arr) - 1]
的下标 i
。
山脉数组:满足以下属性的数组。
len(arr) >= 3
;- 存在
i
(0 < i < len(arr) - 1
),使得:arr[0] < arr[1] < ... arr[i-1] < arr[i]
;arr[i] > arr[i+1] > ... > arr[len(arr) - 1]
。
解题思路 #
可以使用二分查找来查找峰值。
- 使用两个指针
left
、right
。left
指向数组第一个元素,right
指向数组最后一个元素。 - 取区间中间节点
mid
,并比较nums[mid]
和nums[mid + 1]
的值大小。- 如果
nums[mid]
小于nums[mid + 1]
,则右侧存在峰值,令left = mid + 1
。 - 如果
nums[mid]
大于等于nums[mid + 1]
,则左侧存在峰值,令right = mid
。
- 如果
- 最后,当
left == right
时,跳出循环,返回left
。
代码 #
|
|