二分查找
方法一遍历
由题意知,只要遍历一边得到第一个比上一个遍历数据小的数据,返回上一个数据的下标即可。
参考代码
class Solution:def peakIndexInMountainArray(self, arr: List[int]) -> int:last = arr[0]for n,cur in enumerate(arr):if cur < last:return n - 1last = cur
复杂度分析
方法二二分查找
二分查找。每次减半一半,判断mid对应的数据是否符合题意,即 nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1]如果不满足则判断是在左边还是右边进行二分查找。
参考代码
class Solution:def peakIndexInMountainArray(self, arr: List[int]) -> int:l,r = 0,len(arr)-1while l <= r:mid = l + (r - l) // 2if arr[mid] > arr[mid - 1] and arr[mid] > arr[mid + 1]:return midif arr[mid] < arr[mid - 1]:r = midelse:l = mid
复杂度分析
时间复杂度 O(logn)
空间复杂度 O(1)
