题解 | #寻找峰值#
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int findPeakElement(vector<int>& nums) { // write code here if(nums.size()==1) return 0; int left = 0; int right = nums.size(); int mid1 = 0; int mid2 = 0; while(left+1!=right){ mid2 = (left+right)/2; mid1 = mid2-1; if(nums[mid1]<nums[mid2]) left = mid2; else right = mid2; } return left; } };
这个题因为两边都是负无穷,所以找峰值其实就是找降序。每次只找最中间的两个,如果左边小,就说明这两个是升序,就在第二个元素及其右边继续找,如果是右边小,说明这两个是降序,就在第一个元素及其左边找。