在Python中查找由数字列表中的本地峰值元素的索引
假设我们有一个名为num的数字列表,其长度至少为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:num的大小
-
如果n与1相同,则
- 返回ans
- 对于nums中的每个索引i和数字num执行以下操作:
- 如果i> 0且i < n – 1,则 –
- 如果nums [i-1] < num> nums [i + 1],则 –
-
在ans末尾插入i
-
如果i与0相同,则 –
-
如果num> nums [i + 1],则 –
- 在ans末尾插入i
- 如果i与n-1相同,则 –
-
如果num> nums [i – 1],则 –
- 在ans末尾插入i
- 如果i> 0且i < n – 1,则 –
- 返回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]