python編程練習---有序數組中,快速查找是否包含指定數字,並返回其下標


生活小問題,1-100猜數游戲:游戲管理員默認寫下一個數字,讓用戶來猜,管理員會根據用戶猜的數字,來回答大了、小了提示,如何快速找到該數,假定指定數為70
第一次:猜50(折半),管理員:小了,那范圍變成51-100
第二次:猜75(折半),管理員:大了,那范圍變成51-74
第三次:猜62(折半),管理員:小了,那范圍變成63-74
第四次:猜68(折半),管理員:小了,那范圍變成69-74
第五次:猜71(折半),管理員:大了,那范圍變成69-70
第六次:猜69,管理員小了---》為70

假如不通過折半的形式來猜,每次隨機猜,最多需要100次,才能猜到對應的數,也就是需要做到全部遍歷,時間復雜度為O(n)
如果通過折半的形式來猜,可以很快猜到指定數字。

所以對於一個有序數列,最快的查找方式,就是二分查找(折半查找),時間復雜度為O(logn)

以下以一個從小到大排序的數組舉例,目標值為target,找出nums是否包含target

def findTarget(target, nums):
    smaller, biger = 0, len(nums)-1     #初始化最小、最大下標
    while smaller <= biger: #循環條件
        mid = int((smaller+biger)/2)    #二分坐標
        if target > nums[mid]:      #目標值大於二分位置的數
            smaller = mid + 1       #最小的坐標賦值為二分位置坐標+1
        elif target < nums[mid]:    #目標值小於於二分位置的數
            biger = mid -1          #最大的坐標賦值為二分位置坐標-1
        else:
            return mid
    return None


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM