题解 | #二分法求旋转数组最小元素#

旋转数组的最小数字

http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba

function minNumberInRotateArray(rotateArray)
{
    // write code here
    var first = 0;
    var last = rotateArray.length - 1;
//     var NOTE = null;
    if(rotateArray.length == 0){
        return 0;
    }
    while(first != last){
        var mid = first + ((last - first) >> 1);
        if(rotateArray[first] < rotateArray[last]){
            // 数组原本为 非递减数组
            // 旋转之后,应该前面比后面大(前几个放到最后)
            return rotateArray[first]
        }
        if(rotateArray[mid] > rotateArray[last]){
            // 中间那个数比最后那个大,答案在后半部分
            // [3 4 5 1 2]
            first = mid + 1;
        }else if(rotateArray[mid] < rotateArray[last]){
            // 中间那个比后面的小,答案在前半部分
            // [5 1 2 3 4]
            last = mid; 
        }else{
            // 例外情形
            // 原数组[0 1 1 1 1] => [1 0 1 1 1]
            --last
        }
    }
    return rotateArray[first]
}
全部评论

相关推荐

本科生是不是只能去送外卖了
有气魄的海豚在喝茶:外卖这个版本被保安克制
点赞 评论 收藏
分享
点赞 评论 收藏
分享
03-30 19:30
石家庄学院 Java
野蛮的柯基在游泳:都能入股了,还得是Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务