https://leetcode.cn/problems/peak-index-in-a-mountain-array/
符合下列属性的数组 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)) 的解决方案。
示例 1:
输入:arr = [0,1,0]
输出:1
class Solution:
def peakIndexInMountainArray(self, arr: List[int]) -> int:
# 和162题对比看,山脉数组中找最值
# 数组、二分查找
n = len(arr)
def getnum(i):
if i == -1 or i == n:
return float('-inf')
return arr[i]
left, right = 0, n - 1
while left <= right:
mid = left + (right - left) // 2
if getnum(mid) > max(getnum(mid - 1), getnum(mid + 1)):
return mid
elif getnum(mid) > getnum(mid + 1):
right = mid - 1
else:
left = mid + 1
# 数组、二分查找
# left, right, ret = 0, len(arr) - 1, 0
# while left <= right:
# mid = left + (right - left) // 2
# if arr[mid] > arr[mid + 1]:
# right = mid - 1
# else:
# left = mid + 1
# return left
# 数组、二分查找
# left, right, ret = 0, len(arr) - 1, 0
# while left <= right:
# mid = left + (right - left) // 2
# if arr[mid] > arr[mid - 1] and arr[mid] > arr[mid + 1]:
# return mid
# elif arr[mid] > arr[mid + 1]:
# right = mid - 1
# else:
# left = mid + 1