力扣T852山脉数组的峰顶索引
符合下列属性的数组 arr 称为 山脉数组 :
arr.length >= 3
存在 i(0 < i < arr.length - 1)使得:
arr[0] < arr[1] < ... arr[i-1] < arr[i]
arr[i] > arr[i+1] > ... > arr[arr.length - 1]
给你由整数组成的山脉数组 arr ,返回满足 arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1] 的下标 i 。
你必须设计并实现时间复杂度为 O(log(n)) 的解决方案。
既然给我的就是山脉数组,那我第一思路是直接返回最大值的索引值
class Solution:
def peakIndexInMountainArray(self, arr: List[int]) -> int:
return arr.index(max(arr))
顺利通过,现在再看看要求,嗷,有时间复杂度要求,话不多说直接二分法:
class Solution:
def peakIndexInMountainArray(self, arr: List[int]) -> int:
l, r = 0, len(arr) - 1
while l < r:
m = (l + r) // 2
if arr[m] < arr[m + 1]:
l = m + 1
else:
r = m
return l
舒服了,周五残局over,榜单一小时后才刷新,晚安!