题解 | #旋转数组的最小数字#

旋转数组的最小数字

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

package main

/**
 * 
 * @param rotateArray int整型一维数组 
 * @return int整型
*/
func minNumberInRotateArray( rotateArray []int ) int {
    // write code here
    left, right := 0, len(rotateArray)-1

    for left < right {
        middle := left + (right - left)>>1
        //如果中间值大于最右边的值,说明旋转之后最小的
        //数字肯定在mid的右边,比如[3, 4, 5, 6, 7, 1, 2]
        if rotateArray[middle] > rotateArray[right] {
            left = middle + 1
        }else if rotateArray[middle] < rotateArray[right] {
            //如果中间值小于最右边的值,说明旋转之后最小的
            //数字肯定在mid的前面,比如[6, 7, 1, 2, 3, 4, 5],
            //注意这里mid是不能减1的,比如[3,1,3],我们这里只是
            //证明了numbers[mid]比numbers[right]小,但有可能
            //numbers[mid]是最小的,所以我们不能把它给排除掉
            right = middle
        }else {
            //如果中间值等于最后一个元素的值,我们是没法确定最小值是
             // 在mid的前面还是后面,但我们可以缩小查找范围,让right
             // 减1,因为即使right指向的是最小值,但因为他的值和mid
             // 指向的一样,我们这里并没有排除mid,所以结果是不会有影响的。
             //比如[3,1,3,3,3,3,3]和[3,3,3,3,3,1,3],中间的值
             //等于最右边的值,但我们没法确定最小值是在左边还是右边
            right--
        }
    }

//  不断的缩小查找范围,当查找范围的长度为1的时候返回,也就是left等于right的时候
    return rotateArray[left]
}
全部评论

相关推荐

04-30 15:51
已编辑
上海交通大学 机械工程师
点赞 评论 收藏
分享
暑期是进不了大厂了想问问前端友友们&nbsp;,后面应该如何沉淀自己,我想秋招再冲一下尤其是八股,应该抓哪一块是重点,理解到什么程度呢,要学到什么深度才能抗住拷打。还有场景题如何去准备。期待友友们的解答。
命烈焰带我飞走:找个中厂小厂先看看吧,去了熟悉熟悉项目,简历上扒点东西,之后刷刷sobb上百度美团快手的日常实习,流程都比较快轮次也少,别给自己太大压力,一步一步来,先不用想着暑期,转正,秋招那些事情,另外如果可能的话可以关注下面试时候的形象,穿搭,环境这些,其实实习主要就是看个眼缘,看着好看声音好听其实加分不少..八股这些不要死记硬背,挨个拿去问问chatgpt,这个东西做出来是为了解决什么问题,有啥效果,自己有想法有个模糊的概念就可以了,人家也知道你是学生,实习生没有什么kpi,放你去面都是希望能把你招进去的,场景题算法题没做过你可以边试着写边跟面试官说你的想法思路,也可以直说没见过让他们给你提示,反正最后都是与或非顺序分支循环存取值那套。总之建议是别为了秋招..出去旅旅游放松放松,少投几家少背八股多写写代码
点赞 评论 收藏
分享
你背过凌晨4点的八股文么:简历挂了的话会是流程终止,像我一样
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务