题解 | #寻找峰值#

寻找峰值

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;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务