# coding=utf-8 def GetnumK(data, k): number = 0 length = len(data) if data != None and length > 0: first = Getfirstk(data, length, k, 0, length - 1) last = Getlastk(data, length, k, 0, length - 1) if first > -1 and last > -1: number = last - first + 1 return number def Getfirstk(data, length, k, start, end): if start > end: return -1 midindex = (start + end) // 2 middata = data[midindex] if middata == k: if midindex > 0 and data[midindex - 1] == k: end = midindex - 1 else: return midindex elif middata > k: end = midindex - 1 else: start = midindex + 1 return Getfirstk(data, length, k, start, end) def Getlastk(data, length, k, start, end): if start > end: return -1 midindex = (start + end) // 2 middata = data[midindex] if middata == k: if midindex < end and data[midindex + 1] == k: start = midindex + 1 else: return midindex elif middata > k: end = midindex - 1 else: start = midindex + 1 return Getlastk(data, length, k, start, end) if __name__ == '__main__': alist = [1, 3, 4, 4, 4, 4, 5, 6] print(GetnumK(alist, 4))
offer38-找数字在有序数组中出现的次数
最新推荐文章于 2017-10-05 10:49:44 发布