美文网首页程序员
38-数字在排序数组中出现的次数

38-数字在排序数组中出现的次数

作者: 老豆腐 | 来源:发表于2018-07-04 08:11 被阅读9次

暴力法,也没用到排序

创建一个字典,记录每个数的出现次数,之后返回就可以了。

def GetNumberOfK(self, data, k):
    # write code here
    d = dict()
    for i in data:
        if i not in d:
            d[i] =1
        else:
            d[i] +=1
    if k not in d:
        return 0
    return d[k]

二分法,因为是排序的数字,所以二分法是一个比较好的选择。

使用二分法找到对应的数,然后向前判断前面的数是否为相等的数,向后判断也一样,之后返回。

def GetNumberOfK(self, data, k):
    # write code here
    if not data:
        return 0
    count = 0
    l =0
    r = len(data)-1
    mid =  (l+r)//2
    while l<=r:
        if data[mid]>k:
            r = mid
            mid = (r+l)//2
        if data[mid]<k:
            l = mid
            mid = (r+l)//2
        if data[mid]==k:
            p = mid
            while p>=0 and data[p]==k :
                count +=1
                p -=1
            p = mid
            while p< len(data) and data[p]==k :
                count +=1
                p+=1
            return count-1
        return count

相关文章

网友评论

    本文标题:38-数字在排序数组中出现的次数

    本文链接:https://www.haomeiwen.com/subject/rjvsuftx.html