1. 题目描述
2. 解题思路
使用双指针,我们只需要找到一个峰值就可以了。 这个很重要,要记住。
我们先取到数组中间的值,让它与它的前一个或者后一个进行比较(下面的代码实现是与后一个进行比较),如果大于的话,说明它后面的值都不需要的,之间排除一半数据,如果小于的话,说明后一个值大于它,那么它和它的左半区间都不需要了,然后不断循环,最终的值就是我们需要的结果。
3. 代码实现
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int findPeakElement(vector<int>& nums)
{
int left = 0, right = nums.size() - 1;
while(left < right)
{
int mid = left + (right - left) / 2;
if(nums[mid] > nums[mid + 1])
{
right = mid;
}
else
{
left = mid + 1;
}
}
return left;
}
};