美文网首页
2019-08-10 剑指 数字在排序数组中出现的次数

2019-08-10 剑指 数字在排序数组中出现的次数

作者: mztkenan | 来源:发表于2019-08-10 21:49 被阅读0次

测试先行,一次通过。25min。
1.都没找到的特殊情况要进行处理

    def GetNumberOfK(self, data, k):
        first=self.GetFirstK(data,k)
        last=self.GetLastK(data,k)
        res=last-first+1 if last!=-1 else 0  #这里针对都是-1,那么会得出1的错误答案
        return res

    def GetFirstK(self,data,k):
        l,r=0,len(data)-1
        while l<=r:
            m = (l + r) // 2
            if data[m]>k:r=m-1
            elif data[m]<k:l=m+1
            elif m==0 or data[m-1]!=k:return m
            else:r=m-1
        return -1

    def GetLastK(self,data,k):
        l,r=0,len(data)-1
        while l<=r:
            m=(l+r)//2
            if k>data[m]:l=m+1
            elif k<data[m]:r=m-1
            elif m==len(data)-1 or k!=data[m+1]:return m # 注意数组越界
            else:l=m+1
        return -1



if __name__ == '__main__':
    t=Solution()
    print(t.GetNumberOfK([2,3,3,4],2))
    print(t.GetNumberOfK([3,3,3,4],3))
    print(t.GetNumberOfK([3,3,3,4],4))
    print(t.GetNumberOfK([3,3,3,4],5))
    print(t.GetNumberOfK([],5))

相关文章

网友评论

      本文标题:2019-08-10 剑指 数字在排序数组中出现的次数

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