和best time to buy and sell stock中的某个题类似。
思路很简单:在Binary Search上略加修改。规则是:只要mid比其左邻居小,那说明左半段必然存在peak,只访问左半段即可;否则,右半段必然存在peak。需要注意的是,两端也可以是peak。
 
 1 class Solution {
 2 public:
 3     int findPeakElement(const vector<int> &num) {
 4         int n=num.size();
 5         int left=0,right=n-1;
 6         while(left<=right)
 7         {
 8             int mid=left+(right-left)/2;
 9             if((mid==0||num[mid]>num[mid-1])&&(mid==n-1||num[mid]>num[mid+1]))
10                 return mid;
11             if(mid>0&&num[mid-1]>num[mid])//mid>0不要忘记
12                 right=mid-1;
13             else left=mid+1;
14         }       
15     }
16 };

 

相关文章:

  • 2021-06-24
  • 2021-11-22
  • 2021-10-11
  • 2022-01-02
  • 2021-12-06
  • 2021-12-20
  • 2021-09-08
猜你喜欢
  • 2022-03-04
  • 2021-09-29
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-18
相关资源
相似解决方案