zoukankan      html  css  js  c++  java
  • 剑指 Offer 11. 旋转数组的最小数字

    本题与154题相同,重做一遍还是有细节问题

    思路: 

      1. 本题需要找最小数字,在本升序数组中,需想通最小数字就是旋转点

      2. 接着就是二分法

        1) left,right = 0 , len(nums)-1 

        2)   mid =  left + (right-left)//2   这种写法是防止 (right+left) >>1 太大溢出

      3. 细节:

        1) 首先明确在此题中,mid要与right比,而不能与Left比  (我也不知道为啥,用Left就出错) 

        2) 然后是 左右端点的赋值,千万不能用 left = mid+1, right = mid-1 这种将mid直接跳过去;如果是找target ,nums[mid] != target 可以跳过去 

        3)所以,这里要用 left = mid + 1 ,right = mid。

          这是因为mid<right时,有可能mid就是最小值,所以要保留它,写作 right = mid

          而我们的mid取的是左中点,如果更新时写作 left = mid 就永远跳不出去了;   比如  left,right = 2,3   每次mid = 2

          

        if numbers[mid]<numbers[right]:
                    right = mid
        
        elif numbers[mid]>numbers[right]:
                    left = mid+1

  • 相关阅读:
    BZOJ 5314: [Jsoi2018]潜入行动
    BZOJ 3420: Poi2013 Triumphal arch
    BZOJ 1135: [POI2009]Lyz
    BZOJ 4247: 挂饰
    本地
    生成config文件到内存中
    微信获取access_token和curl
    php生成静态页面
    curl
    分页
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/13677505.html
Copyright © 2011-2022 走看看