📅  最后修改于: 2023-12-03 15:26:37.498000             🧑  作者: Mango
在给定数组的索引范围 [L, R]
中查找是否存在波峰。波峰指的是一个数既大于其前面的数,也大于其后面的数。
例如,对于数组 [1, 2, 3, 4, 1],数字 4 就是一个波峰。
我们可以使用二分查找的思想来解决这个问题。假设这个数组为 nums
。
mid
。nums[mid] > nums[mid - 1]
且 nums[mid] > nums[mid + 1]
,那么 nums[mid]
就是一个波峰,直接返回 mid
。nums[mid] > nums[mid - 1]
但 nums[mid] < nums[mid + 1]
,那么波峰一定在 mid
的右侧,我们将 L
更新为 mid + 1
。nums[mid] < nums[mid - 1]
且 nums[mid] > nums[mid + 1]
,那么波峰一定在 mid
的左侧,我们将 R
更新为 mid - 1
。nums[mid] < nums[mid - 1]
且 nums[mid] < nums[mid + 1]
,那么波峰一定在 mid
的右侧,我们将 L
更新为 mid + 1
。不断重复上述步骤,直到找到波峰或者 L > R
。
下面是使用 Python 语言实现的代码片段:
def findPeakElement(nums: List[int], L: int, R: int) -> int:
while L < R:
mid = L + (R - L) // 2
if nums[mid] > nums[mid - 1] and nums[mid] > nums[mid + 1]:
return mid
elif nums[mid] > nums[mid - 1]:
L = mid + 1
else:
R = mid - 1
return L
其中,输入参数 nums
为待查找的数组,L
和 R
为数组的索引范围。函数将返回波峰所在的索引位置。如果在给定的索引范围内不存在波峰,函数将返回最大值所在的索引位置。