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 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

立即開始
廣告