用 Python 编写的查找索引或局部峰值的程序
pythonserver side programmingprogramming更新于 2026/1/20 0:12:17
假设我们有一个名为 nums 的数字列表。我们必须找到 nums 中每个峰值元素的索引,并按升序排列。当满足以下三个条件时,峰值元素的索引 i 为:1. 其右侧的下一个不同于 nums[i] 的数字不存在或必须小于 nums[i] 2. 其左侧的上一个不同于 nums[i] 的数字不存在或必须小于 nums[i] 3. 其左侧或右侧至少有一个不同于 nums[i] 的数字。
因此,如果输入为 nums = [5, 8, 8, 8, 6, 11, 11],则输出将为 [1, 2, 3, 5, 6],因为 8 的稳定值被视为峰值 [1,2,3]。而 11 也是 [5, 6]。
为了解决这个问题,我们将遵循以下步骤 −
- n := nums 的大小
- ans := 一个新的列表
- i := 0
- 当 i < n 时,执行
- i0 := i
- 当 i < n 且 nums[i] 与 nums[i0] 相同,则执行
- i := i + 1
- 如果 (i0 为 0 或 nums[i0] > nums[i0 - 1]) 且 (i 为 n 或 nums[i0] > nums[i]),则
- 如果 i0 不为 0 或 i 不为 n,则
- 在 ans 末尾插入 (从 i0 到 i-1 的列表)
- 如果 i0 不为 0 或 i 不为 n,则
- 返回 ans
示例
让我们看看下面的实现以便更好地理解 −
def solve(nums): n = len(nums) ans = [] i = 0 while i < n: i0 = i while i < n and nums[i] == nums[i0]: i += 1 if (i0 == 0 or nums[i0] > nums[i0 - 1]) and (i == n or nums[i0] > nums[i]): if i0 != 0 or i != n: ans.extend(range(i0, i)) return ans nums = [5, 8, 8, 8, 6, 11, 11] print(solve(nums))
输入
[5, 8, 8, 8, 6, 11, 11]
输出
[1, 2, 3, 5, 6]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

