给定一个长度为n的列表nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。 (1)峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于; (2)列表两个边界可以看成是最小,nums[0]=nums[-1]= −∞ (3)对于所有有效的 i 都有 nums[i] != nums[i + 1]。需要输入一个列表,用python写出
时间: 2024-03-24 11:36:25 浏览: 64
python 实现给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)
5星 · 资源好评率100%
好的,可以使用二分查找的思想来解决这个问题。具体来说,我们首先找到中间位置mid,如果该位置满足nums[mid]>nums[mid+1],那么左侧一定存在峰值,我们可以在左侧继续查找;如果该位置满足nums[mid]<nums[mid+1],那么右侧一定存在峰值,我们可以在右侧继续查找;如果该位置既不大于左侧也不小于右侧,那么该位置就是一个峰值。具体的代码实现如下:
```python
def findPeakElement(nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return -1
left, right = 0, len(nums)-1
while left < right:
mid = (left + right) // 2
if nums[mid] > nums[mid+1]:
right = mid
else:
left = mid + 1
return left
```
我们可以将该函数保存为一个名为find_peak_element的python文件,并在命令行中执行以下代码来测试:
```python
from find_peak_element import findPeakElement
nums = [1,2,3,1]
print(findPeakElement(nums)) # 输出 2
```
这里的nums表示输入的列表,输出的结果应该为峰值的索引位置。
阅读全文