劍指offer——python【第37題】數字在排序數組中出現的次數


題目描述

統計一個數字在排序數組中出現的次數

思路

最賤的方法依舊是count計數。。

當然,,看到有序數組就應該想到二分法,找到重復數字左邊和右邊的數字,然后兩個相減就可以了

解答

方法1 count

class Solution:
    def GetNumberOfK(self, data, k):
        # write code here
        if not data or len(data) ==0:
            return 0
        return data.count(k)

方法2,不用count的計數方法

class Solution:
    def GetNumberOfK(self, data, k):
        # write code here
        if not data or len(data) ==0:
            return 0
        num = 0
        for i in data:
            if i == k:
                num += 1
        return num

方法3,二分法

class Solution:
    def GetNumberOfK(self, data, k):
        left=0
        right=len(data)-1
        leftk=self.getleftK(data,k,left,right)
        rightk=self.getrightK(data,k,left,right)
        return rightk-leftk+1
    def getleftK(self,data,k,left,right):###查找重復數字中最左邊的那個數字位置
        while left<=right:
            middle=(left+right)//2
            if data[middle]<k:
                left=middle+1
            else:
                right=middle-1
        return left
    def getrightK(self,data,k,left,right):###查找重復數字最右邊的那個數字位置
        while left<=right:
            middle=(left+right)//2
            if data[middle]<=k:
                left=middle+1
            else:
                right=middle-1
        return right

 


免責聲明!

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



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