题目
统计一个数字在排序数组中出现的次数,例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5],由于3出现了4次,所以输出4。
Python题解
def get_first_k(data, k, start, end):
if start > end:
return -1
middle_idx = (start + end) / 2
middle_val = data[middle_idx]
if middle_val == k:
if middle_idx == 0 or (middle_idx > 0 and data[middle_idx - 1] != k):
return middle_idx
else:
end = middle_idx - 1
elif middle_val > k:
end = middle_idx - 1
else:
start = middle_idx + 1
return get_first_k(data, k, start, end)
def get_last_k(data, k, start, end):
if start > end:
return -1
middle_idx = (start + end) / 2
middle_val = data[middle_idx]
if middle_val == k:
if middle_idx == len(data) - 1 or (middle_idx < len(data) - 1 and data[middle_idx + 1] != k):
return middle_idx
else:
start = middle_idx + 1
elif middle_val > k:
end = middle_idx - 1
else:
start = middle_idx + 1
return get_last_k(data, k, start, end)
def number_of_k(data, k):
res = 0
data_len = len(data)
if data is not None and data_len > 0:
first = get_first_k(data, k, 0, data_len - 1)
last = get_last_k(data, k, 0, data_len - 1)
if first > -1 and last > -1:
res = last - first + 1
return res