这道题无愧于描述里面的脑筋急转弯词条。用的是二分法,本质就是往高处走,峰值一定在高的地方,因为两边都是负无穷,所有只要有一个数比周边的数更大,顺着这个数就能找到一个峰值。贴代码

 1 class Solution {
 2 public:
 3     int findPeakElement(vector<int>& nums) 
 4     {
 5         int p = 0;
 6         int q = nums.size()-1;
 7         while(p < q)
 8         {
 9             int mid = (p + q)/2;
10             if(nums[mid]>nums[mid+1])
11             q = mid;
12             else
13             p = mid+1;
14         }
15         return q;
16     }
17 };