📜  查找数组中所有局部最大值和局部最小值的索引(1)

📅  最后修改于: 2023-12-03 15:26:38.094000             🧑  作者: Mango

查找数组中所有局部最大值和局部最小值的索引

在数组处理中,经常需要查找其中的局部最大值和局部最小值,并返回它们所在的索引。本文将介绍一个简单的算法来实现这个功能。

算法思路

我们可以遍历一遍数组,对于一个元素,如果它比相邻的两个元素都大(或者都小),就认为它是一个局部最大值(或者最小值),并将其索引存储起来。具体步骤如下:

  1. 初始化一个空列表 indices,用于存储所有的局部最大值和局部最小值的索引;
  2. 遍历数组,对于每个元素:
    1. 如果它是第一个元素,那么和它后面的元素比较;
    2. 如果它是最后一个元素,那么和它前面的元素比较;
    3. 否则,和它前后两个元素比较;
    4. 如果它是局部最大值或者最小值,就将它的索引加入 indices
  3. 返回 indices 列表。
代码实现
def find_local_extremes(arr):
    indices = []

    for i in range(len(arr)):
        if i == 0:
            if arr[i] > arr[i+1]:
                indices.append(i)
        elif i == len(arr) - 1:
            if arr[i] > arr[i-1]:
                indices.append(i)
        else:
            if arr[i] > arr[i-1] and arr[i] > arr[i+1]:
                indices.append(i)
            elif arr[i] < arr[i-1] and arr[i] < arr[i+1]:
                indices.append(i)

    return indices
测试例子
arr = [1, 3, 5, 4, 2, 6, 2]
indices = find_local_extremes(arr)
print(indices) # [2, 5, 6]

在测试例子中,数组 [1, 3, 5, 4, 2, 6, 2] 中,局部最大值的索引为 256