题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
思想
二分,但是因为这道题的特殊性,需要注意到左右两个边界的判断,这个判断的过程是在data[mid] == k
的时候进行的,这里设计两个函数分别对左边界和右边界进行判断。
复习:
def getLeftIndex(l, r, k):
while l <= r:
mid = (l + r) // 2
if data[mid] < k:
l = mid + 1
elif data[mid] > k:
r = mid - 1
else:
# 这里判断是否还能够左移,判断是否到达左边界,否则继续移动
if mid > 0 and data[mid - 1] == k:
r = mid -1
else:
return mid
return -1