该题用二分算法解“山脉数组的峰顶索引”,有需要借鉴即可。
目录
- 1.题目
- 2.总结
1.题目
题目链接:LINK
暴力求解很简单,这里不再提及。
这个可以根据峰顶值分为两部分,因而具有“二段性”,可以用二分算法,一是大于前一个数字的值,二是小于前一个数字的值。
如下图所示:
然后根据此图我们可以得出代码逻辑:
然后我们可以得出代码:
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr)
{
int left = 1, right = arr.size() - 1 - 1;
while(left < right)
{
int mid = left + (right - left + 1) / 2;
if(arr[mid] > arr[mid - 1]) left = mid;
else right = mid - 1;
}
return left;
}
};
2.总结
这个题没什么好说的,抓好“二段性”这个点就可以用二分,然后就结束了。
EOF