该题用二分算法解“山脉数组的峰顶索引”,有需要借鉴即可。
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