题目
给定一个长度为
n
的整数 山脉 数组arr
,其中的值递增到一个 峰值元素 然后递减。返回峰值元素的下标。
你必须设计并实现时间复杂度为
O(log(n))
的解决方案。
解题
def peakIndexInMountainArray(arr):
# 初始化左边界为数组的起始位置,右边界为数组的末尾位置
left, right = 0, len(arr) - 1
# 使用二分查找方法找到峰值
while left < right:
mid = (left + right) // 2 # 计算中间位置
# 如果中间元素小于其右侧元素,说明峰值在右侧
if arr[mid] < arr[mid + 1]:
left = mid + 1 # 将左边界移动到mid的右侧
else:
right = mid # 否则峰值在左侧或就是mid位置
# 当左右边界相等时,即找到了峰值
return left
arr = [0, 1, 0]
peak_index = peakIndexInMountainArray(arr)
print(peak_index) # 1