题目来源于知识星球—英雄算法联盟,一月算法集训专题
前言
经过漫长的休息之后,在寒假以及新年到来之际再次刷起算法,培养自己的算法素养和算法思维,加油!今天只有一道题。
162.寻找峰值(中等)
1.题目描述
2.解题思路
使用二分查找,先判断中间值的大小,如果是0或者中间处值最大,并且如果中间位置为数组最右侧或者中间位置的值比右侧值大,返回中间的位置;之后不断循环,寻找中间位置。
3.代码演示(C++)
class Solution
{
public:
int findPeakElement(vector<int>& nums)
{
int l = 0,r = nums.size() - 1;
while(l<=r)
{
int mid = l + (r-l)/2;
if((mid == 0||nums[mid]>nums[mid-1])&&(mid == nums.size() - 1||nums[mid]>nums[mid+1]))
return mid;
if(nums[mid]<nums[mid + 1])
l = mid + 1;
else
r = mid - 1;
}
return 0;
}
};
4.题目链接
总结
使用二分查找,不断判断中间位置与左右两侧的关系,最终跳出循环。