class Solution
{
public:
int peakIndexInMountainArray(vector& arr)
{
int left = 0;
int right = arr.size() - 2;
while (left < right)
{
int mid = left + (right - left+1) / 2;
//上升坡,峰顶在mid的右边
if (arr[mid] > arr[mid - 1])
{
left = mid;
}
else //下降,峰顶在mid的左边
{
right = mid - 1;
}
复制代码
}
//right=left (此时峰顶的索引)
return left;
}
};
21. ⼭峰数组的峰顶
复制代码
class Solution
{
public:
int peakIndexInMountainArray(vector<int>& arr)
{
int left = 0;
int right = arr.size() - 1;
while (left < right)
{
int mid = left + (right - left) / 2;
//上升坡,峰顶在mid的右边
if (arr[mid] > arr[mid - 1])
{
left = mid;
}
else //下降,峰顶在mid的左边
{
right = mid - 1;
}
//right=left (此时峰顶的索引)
return left;
}
}
};
暴力解法
复制代码
class Solution
{
public:
int peakIndexInMountainArray(vector<int>& arr)
{
//峰顶不在数组首尾
for (int i = 1; i < arr.size() - 1; i++)
{
//当一个元素大于左右相邻的元素时,是峰顶,否则返回-1
if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1])
{
return i;
}
}
return -1;
}
};