在Python中寻找索引或局部峰值的程序

在Python中寻找索引或局部峰值的程序

假设我们有一个名为nums的数字列表。我们必须按升序找到nums中每个峰值元素的索引。当下列任一条件都满足时,峰值元素i的索引i:1、不等于nums[i]的右侧下一个数字不存在或必须小于nums[i];2、不等于nums[i]的左侧上一个数字不存在或必须小于nums[i];3、峰值元素i的左侧或右侧至少有一个数字与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
  • while i
  • i0:=i
  • while i
  • i:=i+1
    • 如果(i0为0或nums[i0]>nums[i0-1]) and (i=n或nums[i0]>nums[i]),那么
  • 如果i0不为0或i不为n,那么
    • 将(i0到i-1的列表)插入ans的末尾

    • 返回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教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程