如何编写程序查找数字数组中局部最大值的索引?
找出数组局部最大值的索引实现方案
核心思路
- 先处理特殊场景:如果数组只有一个元素,直接返回
[0] - 遍历数组的中间元素(排除第一个和最后一个元素,因为它们缺少一侧相邻元素)
- 对每个中间元素,判断其是否同时大于左右两个相邻元素,满足条件则记录其索引
代码实现(Python)
def CheckMaximum(data): max_indices = [] arr_length = len(data) # 处理单个元素的情况 if arr_length == 1: return [0] # 遍历中间元素(索引从1到倒数第二个) for idx in range(1, arr_length - 1): current = data[idx] left = data[idx - 1] right = data[idx + 1] if current > left and current > right: max_indices.append(idx) return max_indices
测试验证
- 输入:
data = [1,7,1,24,15] - 输出:
[1, 3],符合预期(7和24分别是索引1、3处的局部最大值) - 输入:
data = [5] - 输出:
[0],符合要求
补充说明
如果需要将首尾元素也纳入判断(比如定义第一个元素大于右侧则为局部最大值,最后一个元素大于左侧则为局部最大值),只需修改遍历逻辑:
def CheckMaximum(data): max_indices = [] arr_length = len(data) if arr_length == 1: return [0] # 判断第一个元素 if data[0] > data[1]: max_indices.append(0) # 判断中间元素 for idx in range(1, arr_length - 1): current = data[idx] if current > data[idx-1] and current > data[idx+1]: max_indices.append(idx) # 判断最后一个元素 if data[-1] > data[-2]: max_indices.append(arr_length - 1) return max_indices
这个版本适用于更宽泛的局部最大值定义,可根据实际需求选择。
内容的提问来源于stack exchange,提问作者Bar0n
相关产品推荐
相关产品推荐

