Python查找索引或局部峰值的程序


假设我们有一个名为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,则
        • 将(从i0到i-1的列表)插入ans的末尾
  • 返回ans

示例

让我们看下面的实现以更好地理解:

Open Compiler
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]

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

输出

[1, 2, 3, 5, 6]

更新于:2021年10月18日

168 次浏览

开启你的职业生涯

完成课程获得认证

开始
广告