思路1——单次遍历
代码1
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
for(int i=0;i<arr.size();i++)
if(arr[i]>arr[i+1])
return i;
return 0;
}
};
思路2——二分法
- 去除循环“=” 防止出界
- 逆序时 right要包含mid
代码2
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int n = arr.size();
int left = 0, right = n - 1;
while (left < right) {
int mid = (left + right) / 2;
if (arr[mid] > arr[mid + 1])
right = mid;
else
left = mid + 1;
}
return left;
}
};