题解 | 寻找峰值

寻找峰值

https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int findPeakElement (int[] nums) {
        // write code here
        int left = 0;
        int right = nums.length - 1;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < nums[mid + 1]) {
                left = mid + 1;
            } else right = mid;
        }
        return left;
    }
}

已知:nums[i] != nums[i + 1]并且nums[-1] = nums[n] = −∞

分析出两条核心逻辑即可二分法秒杀该题:
第一:如果nums[mid]<nums[mid+1]那么mid一定不是峰值,并再mid的右边一定存在峰值(因为题目假设nums[n]等于负无穷大,也就是从mid开始往右走,nums不会无限递增)
故:if (nums[mid] < nums[mid + 1])left = mid + 1;
第二:如果nums[mid]>nums[mid+1]那么mid有可能就是峰值,如果mid不是峰值那么峰值一定在mid的左边(因为题目假设nums[-1]等于负无穷大,也就是从mid开始往左走,nums不会无限递增)
故:else right = mid;

全部评论

相关推荐

想踩缝纫机的小师弟练...:不理解你们这些人,要放记录就把对方公司名字放出来啊。不然怎么网暴他们
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务