一、题目解析

1.峰值元素是指其值严格大于左右相邻的元素
2.找到峰值元素并返回索引,如果包含多个峰值,返回任意一个峰值所在位置
3.时间复杂度为O(logN)
二、 算法原理

 图1表示nums[0]>nums[1],即第一个值就是峰值;图2表示在范围内的某一处出现nums[i]>nums[i+1],即找到峰值;图3表示在数组长度内没有找到nums[i]>nuns[i+1],即峰值为nums[nums.size()-1]
暴力解法即从第一个位置开始,一直向前走,分情况讨论;分析图3我们可以知道暴力解法的时间复杂为O(N),但由于数据长度只有1000,所以暴力解法也是可以通过的
解法2:二分查找
二段性

 细节问题
1.数据长度为1000,暴力解法也能通过
2.数据大小为[-2^31,2^31-1],所以在计算mid的时候可以用long long来存储数据
三、代码示例
解法1:
int findPeakElement(vector& nums)//解法1 { int n = nums.size(); for(int i = 0;inums[i+1]) return i; } return n-1; }

解法2:
int findPeakElement(vector& nums)//解法2 { int left = 0,right = nums.size()-1; while(leftnums[mid+1]) right = mid; else left = mid + 1; } return right; }
 
 
看到最后,如果对您有所帮助,还请点赞、收藏和关注,我们下期再见!