📅  最后修改于: 2023-12-03 15:40:23.839000             🧑  作者: Mango
在一个数组中,峰元素是指大于左右相邻元素的元素。给定一个输入数组,必要时请找到任一峰元素并返回其索引。
最简单的方法是线性遍历整个数组,只需在找到大于相邻元素的元素时立即返回其索引。该算法的时间复杂度为 O(n),其中 n 是数组长度。
def findPeakElement(nums: List[int]) -> int:
for i in range(len(nums)):
if i == 0 and nums[i] > nums[i+1]:
return i
elif i == len(nums) - 1 and nums[i] > nums[i-1]:
return i
elif nums[i] > nums[i-1] and nums[i] > nums[i+1]:
return i
我们也可以使用二分查找来找到峰元素。根据中间元素与相邻元素的大小关系,我们可以确定中间元素处于一个上坡或下坡上。如果中间元素处于下坡,那么峰元素可能在中间元素左侧。如果中间元素处于上坡,那么峰元素可能在中间元素右侧。不断地以这种方式缩小查找范围,我们最终将找到峰元素。
该算法的时间复杂度为 O(log n),其中 n 是数组长度。
def findPeakElement(nums: List[int]) -> int:
left, right = 0, len(nums) - 1
while left < right:
mid = (left + right) // 2
if nums[mid] > nums[mid+1]:
right = mid
else:
left = mid + 1
return left
在给定数组中查找峰元素,我们可以使用线性遍历或二分查找算法。二分查找算法的时间复杂度为 O(log n),而线性遍历算法的时间复杂度为 O(n)。因此,在处理大型数组时,建议使用二分查找算法。