每日一题
## [LCR 069. 山脉数组的峰顶索引]()
符合下列属性的数组 `arr` 称为 **山峰数组**(**山脉数组)** :
- `arr.length >= 3`
- 存在
i(0 < i < arr.length - 1)使得:
- `arr[0] < arr[1] < ... arr[i-1] < arr[i] `
- `arr[i] > arr[i+1] > ... > arr[arr.length - 1]`
给定由整数组成的山峰数组 `arr` ,返回任何满足 `arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1]` 的下标 `i` ,即山峰顶部。
**示例 1:**
```
输入:arr = [0,1,0]
输出:1
```
**示例 2:**
```
输入:arr = [1,3,5,4,2]
输出:2
```
**示例 3:**
```
输入:arr = [0,10,5,2]
输出:1
```
解法一:二分法
时间复杂度:O(logn)
空间复杂度:O(1)
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int left = 1, right = arr.size() - 2;
while(left < right)
{
int mid = left + (right - left) / 2;
if(arr[mid - 1] > arr[mid]) right = mid - 1;
else if(arr[mid + 1] > arr[mid]) left = mid + 1;
else return mid;
}
return left;
}
};