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]
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP