给你一个下标从 0 开始的数组 mountain 。你的任务是找出数组 mountain 中的所有 峰值。 以数组形式返回给定数组中 峰值 的下标,顺序不限 。
时间: 2024-09-20 18:09:07 浏览: 26
在一个下标从0开始的数组 `mountain` 中寻找峰值意味着我们需要找到所有局部最大值的位置。峰顶元素比它左边的元素大,同时比右边的元素也大。我们可以采用滑动窗口或者双指针的方式来遍历这个数组并定位峰值。
算法步骤如下:
1. 初始化两个指针,left初始为0,right初始为1。
2. 比较 `mountain[left]` 和 `mountain[right]`,如果 `mountain[right]` 大于 `mountain[left]`,说明找到了一个可能的峰值,将右指针 right 加一,并检查新加入的元素是否仍是峰值。
3. 否则,如果 `mountain[right]` 小于等于 `mountain[left]`,说明当前不是峰值,左指针 left 向右移动一位,继续比较。
4. 当 left < right 时,继续此过程,直到两个指针相遇或超过数组长度。
5. 找到峰值后,将其下标添加到结果列表中。
6. 重复以上步骤,直至右指针到达数组末尾。
以下是Python的伪代码示例:
```python
def find_peaks(mountain):
peaks = []
if len(mountain) < 2: # 如果只有一个元素或为空数组,直接返回
return peaks
left, right = 0, 1
while left < right < len(mountain):
if mountain[right] > mountain[left]:
if (right - 1]) or (right + 1 < len(mountain) and mountain[right] > mountain[right + 1]):
peaks.append(right)
else:
left += 1
right += 1
return peaks
# 示例:
mountain = [0, 3, 2, 1]
peaks = find_peaks(mountain) # 返回 [1, 2]
```
阅读全文