53-1-ソートされた配列で数値を検索する-python

トピック:並べ替えられた配列に数値が表示される回数。入力は、ソートされた配列と数値です。

def get_first_num(nums,k,start,end):
    if start>end:
        return -1
    mid = (end+start)//2
    if nums[mid]==k:
        if mid==0 or (mid>0 and nums[mid-1]!=k):
            return mid
        else:
            end = mid-1
    elif nums[mid]>k:
        end = mid-1
    else:
        start = mid+1

    return get_first_num(nums,k,start,end)

def get_end_num(nums,k,start,end):
    if start>end:
        return -1
    mid = (end + start) // 2
    if nums[mid]==k:
        if mid==len(nums)-1 or (mid<len(nums)-1 and nums[mid+1]!=k):
            return mid
        else:
            start = mid
    elif nums[mid]>k:
        end = mid-1
    else:
        start = mid+1
    return get_end_num(nums,k,start,end)

def get_num_k(nums,k):
    start = get_first_num(nums,k,0,len(nums)-1)
    end = get_end_num(nums,k,0,len(nums)-1)
    print(start,end)
    return end-start+1

  注:一般的な解決策は、辞書を使用して各番号の出現回数をカウントするか、二分法を使用してターゲット番号の1つを見つけてから、前後に検索することです。これら2つの方法の時間計算量はO(n)です。

O(lgn)メソッドは、2つのバイナリ検索を使用します。最初はターゲット番号の最初の出現位置を見つけ、2回目は最後の出現位置を見つけ、2つの最後の減算はターゲット番号の番号。

おすすめ

転載: blog.csdn.net/wh672843916/article/details/105503749