バイナリ検索数-037-ソート配列に表示される数字

記事のディレクトリ

タイトル説明

回数にソート配列に表示される数をカウントします。

分析

整然とした配列で検索し、バイナリサーチは、時間の優位性の複雑さを持っています。ここでの直接使用は、各ターゲット検索する検索バイナリ左右边界発生頻度が決定され、時間複雑度は、O(LOGN)。

コード

# -*- coding:utf-8 -*-
class Solution:
    def GetNumberOfK(self, data, k):
        # write code here
        if not data:return 0
        
        left = self.GetLeftK(data, k)
        right = self.GetRightK(data, k)

        return right - left + 1 if left != -1 and right != -1 else 0
        
        
    def GetLeftK(self, data, k):
        left = 0
        right = len(data) - 1
        while left < right:
            mid = left + (right - left) // 2
            if data[mid] < k:
                left = mid + 1
            else:
                right = mid
        return left if data[left] == k else -1
        
    def GetRightK(self, data, k):
        left = 0
        right = len(data) - 1
        while left<right:
            mid = left + (right - left + 1) // 2
            if data[mid] > k:
                right = mid - 1
            else:
                left = mid
        return right if data[left] == k else -1
公開された219元の記事 ウォン称賛85 ビュー14万+

おすすめ

転載: blog.csdn.net/z_feng12489/article/details/103301684