题解 | #寻找峰值#(二分查找)

寻找峰值

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

分析: 最简单的是循环遍历O(n)

二分查找,O(log2n)

最左边和最右边为无穷小,当任意一个位置i上的值小于相邻i+1时,则左边必然存在峰值。

当任意一个位置i上的值大于相邻i+1时,右边必存在峰值。

class Solution {
public:
    // 左右边为无穷小,所以 当前位 大于临近坐标
    int findPeakElement(vector<int>& nums) {  // 索引logn 二分查找
        int len = nums.size();
        int low=0, high=len-1;
        while(low < high){
            int mid = low + high >> 1;
            nums[mid] < nums[mid+1]?low=mid+1:high=mid; 
        }
        return low;
    }
};
全部评论
找到mid,如果mid<mid>mid+1,说明mid本身可能就是峰值,所以high=mid</mid>
点赞 回复 分享
发布于 2022-03-24 11:18
题解描述有问题吧?看代码的意思是,存在某一位置nums[i] < nums[i+1]时,则继续向右查找,否则向左查找,跟“当任意一个位置i上的值小于相邻i+1时,则左边必然存在峰值。当任意一个位置i上的值大于相邻i+1时,右边必存在峰值。”描述不符。
点赞 回复 分享
发布于 2022-06-19 09:06

相关推荐

服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
7 收藏 评论
分享
牛客网
牛客企业服务