题解:
题解:
class Solution {
public:
//解法1:二分法,时间复杂度O(logn),空间复杂度O(1)
//算法思路:沿着相邻元素增大的方向寻找一定能找到峰值
int findPeakElement_1(vector<int>& nums) {
int begin=0,end=nums.size()-1;
while(begin<end)//循环终止条件begin=end,也就是它两同时指向峰值
{
int mid=begin+(end-begin)/2;
if(nums[mid]>nums[mid+1])end=mid;//向mid元素增大方向寻找峰值
else begin=mid+1;//向元素增大方向寻找峰值
}
return begin;
}
//解法2:暴力法,时间复杂度O(n),空间复杂度O(1)
int findPeakElement_2(vector<int>& nums)
{
for(int i=0;i<nums.size()-1;++i)
if(nums[i]>nums[i+1])
return i;
return nums.size()-1;//对于全部按升序排列的数组之间返回最后一个元素的下标
}
};