题目在这:https://leetcode-cn.com/problems/B1IidL/
思路分析:
一道找最大值的题。直接一行代码可以解决这道题,比如:return arr.index(max(arr))
不过面试官那边能不能解决就不一定了。。hah…
使用传统的二分法找最大值。满足题目的进阶要求。
这里需要注意题目中所陈述的要求。山峰数值的左右两边都是依次递减的。
所以我们设置left和right指向数组的开头和结尾,
每次计算mid中间值。然后比较中间值和中间值下一个值的大小。更改所求区间即可。
完整代码
class Solution:
def peakIndexInMountainArray(self, arr: List[int]) -> int:
left = 0
right = len(arr) -1
while left != right:
mid = (left+right) // 2
if arr[mid] < arr[mid+1]:
left = mid +1
else:
right = mid
return right