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

示例

讓我們看下面的實現以更好地理解:

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]

更新於:2021年10月18日

168 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.