给你一个下标从0开始的数组mountain,你的任务是找出mountain中所有峰值,以数组形式返回给定数组中峰值的下标,顺序不限 Python
时间: 2024-10-17 09:14:40 浏览: 19
在Python中,为了找到一个数组(例如`mountain`)中的所有峰值(即局部最大值),你可以采用滑动窗口算法或者遍历数组并比较前后元素。下面是一个简单的遍历算法示例:
```python
def find_peaks(mountain):
peaks = [] # 用于存储峰值的列表
n = len(mountain)
# 遍历数组,检查每个元素是否大于其左右邻居
for i in range(1, n - 1): # 跳过数组的第一个和最后一个元素,因为它们可能没有邻居
if mountain[i] > mountain[i - 1] and mountain[i] > mountain[i + 1]:
peaks.append(i) # 如果当前元素是峰值,就添加到结果中
return peaks # 返回峰值的索引列表
# 示例
mountain = [1, 3, 2, 5, 4, 6, 8]
peaks_indices = find_peaks(mountain)
print("Peak indices:", peaks_indices)
相关问题
给你一个下标从 0 开始的数组 mountain 。你的任务是找出数组 mountain 中的所有 峰值。 以数组形式返回给定数组中 峰值 的下标,顺序不限 。
在一个下标从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]
```
阅读全文