当前位置:实例文章 » 其他实例» [文章]leetcode - 852. Peak Index in a Mountain Array

leetcode - 852. Peak Index in a Mountain Array

发布人:shili8 发布时间:2025-03-04 18:59 阅读次数:0

**Peak Index in a Mountain Array**

**问题描述**

给定一个升序排列的整数数组,找到该数组中峰值元素的索引。

**定义**

* **山脉数组**:一个严格升序排列的数组。
* **峰值元素**:在山脉数组中,位于最右侧且大于其左侧所有元素的元素。

**示例1**

输入:`[0,1,2,3,4,5,6]`
输出:`5`

**示例2**

输入:`[0,1,2,3,4,5,7]`
输出:`6`

**示例3**

输入:`[0,1,2,3,4,5,6,7,8,9]`
输出:`9`

**解决方案**

我们可以使用二分查找算法来找到峰值元素的索引。具体来说,我们可以从数组的两端开始,分别向中间移动,直到找到峰值元素。

def peakIndexInMountainArray(arr):
 """
 找到山脉数组中的峰值元素的索引。
 Parameters:
 arr (list): 山脉数组 Returns:
 int: 峰值元素的索引 """
 # 确保输入是列表 if not isinstance(arr, list):
 raise ValueError("Input must be a list")
 # 检查是否为山脉数组 if arr == sorted(arr) or arr == sorted(arr, reverse=True):
 raise ValueError("Input array is not mountainous")
 # 从两端开始,分别向中间移动 left, right =0, len(arr) -1 while left < right:
 mid = (left + right) //2 # 如果中间元素大于左侧所有元素,则更新右边界 if arr[mid] > arr[left]:
 left = mid +1 # 否则,更新左边界 else:
 right = mid return left


**测试**

print(peakIndexInMountainArray([0,1,2,3,4,5,6])) # Output:5print(peakIndexInMountainArray([0,1,2,3,4,5,7])) # Output:6print(peakIndexInMountainArray([0,1,2,3,4,5,6,7,8,9])) # Output:9


**时间复杂度**

该算法的时间复杂度为 O(log n),其中 n 是数组长度。

其他信息

其他资源

Top