Python程序:查找数字列表中的局部峰值索引


假设我们有一个名为 nums 的数字列表,其长度至少为 2。我们需要找到列表中每个峰值的索引。该列表按升序排序。当满足以下条件时,索引 i 为峰值:

  • 当 i = 0 时,nums[i] > nums[i + 1]

  • 当 i = n - 1 时,nums[i] > nums[i - 1]

  • 否则,nums[i - 1] < nums[i] > nums[i + 1]

因此,如果输入类似于 nums = [5, 6, 7, 6, 9],则输出将为 [2, 4],因为索引 2 处的元素为 7,它大于两个相邻元素,而索引 4 处的元素为 9,它大于其左侧元素。

为了解决这个问题,我们将遵循以下步骤:

  • ans := 一个新的列表

  • n := nums 的大小

  • 如果 n 等于 1,则

    • 返回 ans

  • 对于 nums 中的每个索引 i 和数字 num,执行以下操作:

    • 如果 i > 0 且 i < n - 1,则

      • 如果 nums[i - 1] < num > nums[i + 1],则

        • 将 i 插入到 ans 的末尾

      • 如果 i 等于 0,则

        • 如果 num > nums[i + 1],则

          • 将 i 插入到 ans 的末尾

      • 如果 i 等于 n - 1,则

        • 如果 num > nums[i - 1],则

          • 将 i 插入到 ans 的末尾

  • 返回 ans

示例

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

def solve(nums):
   ans = []
   n = len(nums)

   if n == 1:
      return ans

   for i, num in enumerate(nums):
      if i > 0 and i < n - 1:
         if nums[i - 1] < num > nums[i + 1]:
            ans.append(i)

      if i == 0:
         if num > nums[i + 1]:
            ans.append(i)

      if i == n - 1:
         if num > nums[i - 1]:
            ans.append(i)

   return ans

nums = [5, 6, 7, 6, 9]
print(solve(nums))

输入

[5, 6, 7, 6, 9]

输出

[2, 4]

更新于: 2021年10月11日

358 次查看

启动你的 职业生涯

通过完成课程获得认证

立即开始
广告