题解 | #寻找峰值#
寻找峰值
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;
}
};

查看4道真题和解析