162. 寻找峰值
第一种想到O(n)解法,直接for循环遍历求出最大值的下标输出即可:
class Solution {
public:
int findPeakElement(vector<int>& nums) {
if(nums.size()<=1)
return 0;
int a=nums[0],ans=0;
for(int i=1;i<nums.size();i++)
{
if(nums[i]>a)
{
ans=i;
a=nums[i];
}
}
return ans;
}
};
第二种想到O(longn)的,二分找最大值,不断缩小范围:
class Solution {
public:
int findPeakElement(vector<int>& nums) {
if(nums.size()<=1)
return 0;
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;
}
};