题解 | 寻找峰值

寻找峰值

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

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

这道二分比较有意思。平常的二分规定都是在有序数组中使用,但是呢,这个偏偏是不能排序的。如果不是这道题标了个二分,还真不一定能想出来用二分做。而知道是用二分之后,我们知道二分的本质就是要处理好边界条件,所以可以具体分析就好了。#牛客春招刷题训练营#

#牛客春招刷题训练营#
全部评论
https://www.nowcoder.com/discuss/727521113110073344
点赞 回复 分享
发布于 03-20 12:34 山东

相关推荐

03-20 11:10
已编辑
大连民族大学 Java
点赞 评论 收藏
分享
刘湘_passion:出国旅游?那就小心你的腰子咯
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务