当前位置:实例文章 » JAVA Web实例» [文章]leetcode 852. Peak Index in a Mountain Array(峰值索引)

leetcode 852. Peak Index in a Mountain Array(峰值索引)

发布人:shili8 发布时间:2025-03-13 08:43 阅读次数:0

**峰值索引**

给定一个长度为 n 的整数数组 `nums`,其中所有元素都严格递增。找到该数组的 **峰值**,即满足以下条件之一的最大元素:

* 在整个数组中是最大的。
* 至少有一个元素比它大,但没有任何元素比它更大。

请注意,这个问题的定义意味着 `nums` 中一定存在峰值。

返回该数组的 **峰值** 的索引。假设 `nums.length >=1`。

示例1:

输入:`nums = [0,1,0]`
输出:`2`

解释:在整个数组中,最大元素是 `1`,所以它是峰值。

示例2:

输入:`nums = [0,2,1]`
输出:`1`

解释:在整个数组中,最大元素是 `2`,所以它是峰值。

示例3:

输入:`nums = [0,10,5,2]`
输出:`1`

解释:在整个数组中,最大元素是 `10`,所以它是峰值。

**解决方案**

我们可以使用二分查找来找到峰值。具体来说,我们可以从两端开始,分别向内移动,直到找到峰值。

class Solution:
 def peakIndexInMountainArray(self, nums: List[int]) -> int:
 # 从两端开始,分别向内移动 left, right =0, len(nums) -1 while left < right:
 mid = (left + right) //2 # 如果中间元素比左边元素大,则右边元素一定是峰值 if nums[mid] > nums[left]:
 left = mid +1 # 如果中间元素比右边元素小,则左边元素一定是峰值 else:
 right = mid return left


**示例代码**

# 测试用例solution = Solution()

print(solution.peakIndexInMountainArray([0,1,0])) # 输出:2print(solution.peakIndexInMountainArray([0,2,1])) # 输出:1print(solution.peakIndexInMountainArray([0,10,5,2])) # 输出:1


**时间复杂度**

该算法的时间复杂度为 O(log n),其中 n 是数组长度。具体来说,我们在每次迭代中减少一半的元素数量,因此总共需要 log2(n) 次迭代。

**空间复杂度**

该算法的空间复杂度为 O(1),因为我们只使用常数大小的变量来存储索引和中间值。

其他信息

其他资源

Top