题目描述:
解法一(迭代):
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int left=0,right=nums.size()-1;
while(left<right){
int mid=(left+right)/2;
if(nums[mid]>nums[mid+1]) right=mid;
else left=mid+1;
}
return left;
}
};
解法二(递归):
class Solution {
public:
int findPeakElement(vector<int>& nums) {
//if(nums.size()<2) return nums
return helper(nums,0,nums.size()-1);
}
int helper(vector<int>& nums ,int left, int right){
if(left==right) return left;
int mid=(left+right)/2;
if(nums[mid]>nums[mid+1]) return helper(nums,left,mid);
else return helper(nums,mid+1,right);
}
};
题目描述:
解法一:
class Solution {
public:
int peakIndexInMountainArray(vector<int>& A) {
return max_element(A.begin(),A.end())-A.begin();
}
};
解法二:
class Solution {
public:
int peakIndexInMountainArray(vector<int>& A) {
int left=0,right=A.size()-1;
while(left<right){
int mid=(left+right)/2;
if(A[mid]<A[mid+1]) left=mid+1;
else right=mid;
}
return left;
}
};