题解 | #寻找峰值#
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76?tpId=295&tqId=23256&ru=%2Fexam%2Foj&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int findPeakElement(vector<int>& nums) { // write code here int n = nums.size(); int left = 0, right = n - 1; //左闭右闭 //left 左边的一定比left小 //right右边的一定比right小 //所以left和right重合之后,一定是一个峰值 while(left < right) { int mid = (left + right) / 2; if (nums[mid + 1] > nums[mid]) { //之所以选择mid + 1和mid比,是因为mid是向下取整,mid+1不会 //越界 left = mid + 1; //如果mid右边的比mid大,那么右边可能存在一个峰值,但是mid本身肯定不是峰 //值,所以left = mid + 1; } else right = mid; //如果mid右边比mid小,那么mid本身可能是个峰值,right = mid (注意是闭区 //间) } return left; } };