方法一:
从头线性扫描:
class Solution {
public:
int peakIndexInMountainArray(vector<int>& A) {
int l=A.size();
int i=0;
for(;i+1<l&&A[i]<A[i+1];i++);
return i;
}
};
从尾线性扫描:
class Solution {
public:
int peakIndexInMountainArray(vector<int>& A) {
int l=A.size();
int i=l-1;
for(;i>=1&&A[i]<A[i-1];i--);
return i;
}
};
方法二:
函数:
class Solution {
public:
int peakIndexInMountainArray(vector<int>& A) {
vector<int>::iterator biggest = max_element(A.begin(), A.end());
return distance(A.begin(), biggest);
}
};
方法三:
二分查找:
class Solution {
public:
int peakIndexInMountainArray(vector<int>& A) {
int l=A.size();
int low=0;
int high=l-1;
int mid=0;
while(low<high){
mid=low+(high-low)/2;
if(A[mid]<A[mid+1]){
low=mid+1;
}else{
high=mid;
}
}
return low;
}
};