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

题目描述
统计一个数字在排序数组中出现的次数。

解题思路:
通过二分法,分别找出这个数字第一次出现的位置和最后一次出现的位置

python solution:

# -*- coding:utf-8 -*-
class Solution:
    def GetNumberOfK(self, data, k):
        first = self.getfirstk(data,k,0,len(data)-1)
        last = self.getlastk(data,k,0,len(data)-1)
        # print(first,last)
        if first>-1 and last>-1:
            return last-first+1
        else:
            return 0

    def getfirstk(self,data,k,start,end):
        if start>end:
            return -1
        mid = (start+end)//2
        middata = data[mid]
        if middata==k:
            if (mid>0 and data[mid-1]!=k) or mid==0:
                return mid
            else:
                end = mid-1
        elif middata>k:
            end = mid-1
        else:
            start = mid+1
        return self.getfirstk(data,k,start,end)

    def getlastk(self,data,k,start,end):
        if start>end:
            return -1
        mid = (start+end)//2
        middata = data[mid]
        if middata==k:
            if (mid<len(data)-1 and data[mid+1]!=k) or mid==len(data)-1:
                return mid
            else:
                start = mid + 1
        elif middata<k:
            start = mid+1
        else:
            end = mid-1
        return self.getlastk(data,k,start,end)
原文地址:https://www.cnblogs.com/bernieloveslife/p/10428096.html