当前位置: 面试刷题>> 找峰值 (经典算法题500道)
**题目描述补充**:
在一个整数数组中,我们定义峰值元素是指它大于相邻的两个元素(如果存在的话)。给定一个数组 `nums`,找到峰值元素并返回其索引。数组可能包含多个峰值,但你只需要返回任意一个峰值的索引即可。
数组可能以任何顺序出现,并且保证至少存在一个峰值元素。
**示例 1**:
```
输入: nums = [1,2,1]
输出: 1
解释: 2 是峰值元素,你的函数应该返回其索引 1。
```
**示例 2**:
```
输入: nums = [1,3,5,4,2]
输出: 2
解释: 5 是峰值元素,你的函数应该返回其索引 2。
```
**PHP 示例代码**:
```php
function findPeakElement($nums) {
$left = 0;
$right = count($nums) - 1;
while ($left < $right) {
$mid = $left + intval(($right - $left) / 2);
if ($nums[$mid] < $nums[$mid + 1]) {
$left = $mid + 1;
} else {
$right = $mid;
}
}
return $left;
}
// 示例
$nums = [1, 3, 5, 4, 2];
echo findPeakElement($nums); // 输出: 2
```
**Python 示例代码**:
```python
def findPeakElement(nums):
left, right = 0, len(nums) - 1
while left < right:
mid = (left + right) // 2
if nums[mid] < nums[mid + 1]:
left = mid + 1
else:
right = mid
return left
# 示例
nums = [1, 3, 5, 4, 2]
print(findPeakElement(nums)) # 输出: 2
```
**JavaScript 示例代码**:
```javascript
function findPeakElement(nums) {
let left = 0;
let right = nums.length - 1;
while (left < right) {
const mid = Math.floor((left + right) / 2);
if (nums[mid] < nums[mid + 1]) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
// 示例
const nums = [1, 3, 5, 4, 2];
console.log(findPeakElement(nums)); // 输出: 2
```
**码小课** 网站中有更多关于算法和数据结构的相关内容,包括二分查找、排序算法、图论算法等,欢迎大家前往学习交流。