在 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],因为 8s 的平台被认为是峰 [1,2,3]。11s 也是,[5, 6]。

示例

让我们看看以下实现以获得更好的理解 -

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]

猜你喜欢