37. 数字在排序数组中出现的次数
题目描述
统计一个数字在排序数组中出现的次数。
思路
思路一:
暴力解,遍历数组并对比,一个循环,时间复杂度为
思路二:
由于数组是一个排序过的数组,所以可以用二分查找法,定位k的第一次出现位置和最后一次出现位置,时间复杂度为
代码实现
暴力解,遍历数组
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
count = 0
for i in range(len(data)):
if(data[i] == k):
count += 1
return count
# 或者就直接用python的count函数
# return data.count(k)二分查找法:
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
def getFirst(data,k):
left = 0
right = len(data)-1
while(right >= left):
if(data[left] == k):
return left
mid = (right+left)//2
if(data[mid] > k):
right = mid - 1
elif(data[mid] < k):
left = mid + 1
else:
if(data[mid] == k and data[mid-1]!=k):
return mid
right = mid - 1
return -1
def getLast(data,k):
left = 0
right = len(data)-1
while(right >= left):
if(data[right] == k):
return right
mid = (right+left)//2
if(data[mid] > k):
right = mid - 1
elif(data[mid] < k):
left = mid + 1
else:
if(data[mid] == k and data[mid+1]!=k):
return mid
left = mid + 1
return -1
num = 0
if data:
first = getFirst(data,k)
print(first)
last = getLast(data,k)
print(last)
if(first > -1 and last > -1):
num = last - first + 1
return num
return num python二分查找法
评论中指出了两个问题,已修正,注意python整除要用//,while中的比较用<=
链接中的代码有错误,仅供参考
def BinarySearch(array,t):
low = 0
height = len(array)-1
while low <= height:
mid = (low+height)//2
if array[mid] < t:
low = mid + 1
elif array[mid] > t:
height = mid - 1
else:
return array[mid]
return -1 
京公网安备 11010502036488号