【剣指offer】38.ソート配列に数値が表示される回数(python)
5873 ワード
タイトルの説明
ソート配列に表示される数値の回数を統計します.
構想
『剣指offer』P 204は二分法を用いて統計を検討している.第1回二分法は、この数字が現れる位置 を見つけた.はそれぞれ
注意:
code
ソート配列に表示される数値の回数を統計します.
構想
『剣指offer』P 204は二分法を用いて統計を検討している.
pos
pos
の左右の両側の配列を複数回二分して検索し、首尾が現れる位置を見つけた.注意:
k
が配列に存在しない場合.code
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
if not data:
return 0
start = 0
end = len(data) - 1
# k
index = self.binaryFind(data, start, end, k)
if index == -1:
return 0
indexLeft = index
indexRight = index
#
while indexLeft > 0 and data[indexLeft - 1] == k:
indexLeft = self.binaryFind(data, 0, indexLeft - 1, k)
while indexRight < end and data[indexRight + 1] == k:
indexRight = self.binaryFind(data, indexRight + 1, end, k)
return indexRight - indexLeft + 1
def binaryFind(self, data, left, right, k):
while left <= right:
mid = (right + left) / 2
if data[mid] > k:
right = mid - 1
elif data[mid] < k:
left = mid + 1
else:
return mid
return -1