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