leetcode 852 山脉数组的顶峰索引
一、题目描述
二、解题思路
整体思路:
“顶峰”可以将向量划分成两个部分,“顶峰”及其右侧的数均为上升趋势,“顶峰”左侧的数均为下降趋势,满足“二段性”,可以使用二分法来解决这个问题,实质上是查找左区间。
具体思路:
(1)首先进行边界处理,如果数组为空,表示无法找到“顶峰”,返回0;
(2)二分查找左边界
//查找左边界
int left=0,right=arr.size()-1;
while(left<right){
int mid=left+(right-left)/2;
if(arr[mid]<=arr[mid+1]) left=mid+1;
else if(arr[mid]>=arr[mid+1]) right=mid;
}
三、代码实现
解法一:暴力解法
class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {//边界处理if(arr.empty()) return 0;int start;for(start=1;arr[start]<arr[start+1];start++);return start;}
};
解法二:二分法查找左边界
class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {//边界处理if(arr.empty()) return 0;//查找左边界int left=0,right=arr.size()-1;while(left<right){int mid=left+(right-left)/2;if(arr[mid]<=arr[mid+1]) left=mid+1;else if(arr[mid]>=arr[mid+1]) right=mid;}return left;}
};