面试53题:

题目:统计一个数字在排序数组中出现的次数。

思路:二分查找法,分别找到此数字在排序数组中第一次和最后一次出现的位置,然后次数等于两个位置之差加1。

时间复杂度:O(log n)

解题代码:

# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
number = 0
if data !=None and len(data)>0:
length=len(data)
first = self.GetFirst(data,length,k,0,length-1)
last = self.GetLast(data,length,k,0,length-1)
if first > -1 and last > -1:
number=last-first+1
return number def GetFirst(self,data,lenth,k,start,end):
if start>end:
return -1
middle = (start+end)//2
if data[middle]==k:
if middle>0 and data[middle-1]==k:
end = middle -1
else:
return middle
elif data[middle]>k:
end=middle-1
else:
start=middle+1
return self.GetFirst(data,lenth,k,start,end) def GetLast(self, data, lenth, k, start, end):
if start>end:
return -1
middle=(start+end)//2
if data[middle]==k:
if middle<end and data[middle+1]==k:
start = middle+1
else:
return middle
elif data[middle]>k:
end=middle-1
else:
start=middle+1
return self.GetLast(data, lenth, k, start, end)

最新文章

  1. android dialog 有关token的问题
  2. 一致性hash的理解
  3. 【FTP】在自己的电脑上建立FTP服务器
  4. Android Action Bar简介
  5. 用 mCustomScrollbar 滚动条插件实现滚动更新添加数据
  6. php 执行外部命令exec() system() passthru()
  7. C++C++ 指针(二)--c++ 指针(二)--c++
  8. 【LeetCode】Swap Nodes in Pairs
  9. 获取图片中的文本--MODI
  10. 对lea与mov的理解
  11. python :ascii codec can't decode byte 0xe8 in posit
  12. 关于字符型char变量
  13. static 关键字 静态成员变量及静态成员函数
  14. MT7688交叉编译环境配置
  15. 【API知识】一种你可能没见过的Controller形式
  16. Python_每日习题_0006_斐波那契数列
  17. timescaledb 集成 madlib
  18. Linux内核分析第十八章读书笔记
  19. C# 因IIS回收导致定时器失效的解决方案
  20. Autocomplete TEdit

热门文章

  1. 初识WatiN
  2. OA项目之权限设计②
  3. Visual Studio- “无法启动此程序,因为计算机中丢失 xxx.dll尝试重新安装该程序以解决此问题&quot;
  4. iOS valueForKeyPath快速计算求和、平均值、最大、最小
  5. StoryBoard不使用AutoLayout情况下 按比例快速兼容适配iPhone6/6 Plus教程【转载】
  6. 读写文件,用代码在讲html文件转为jsp文件
  7. IRQ与FIQ的区别
  8. Yarn源码分析之如何确定作业运行方式Uber or Non-Uber?
  9. E - Leading and Trailing 求n^k得前三位数字以及后三位数字,保证一定至少存在六位。
  10. CSS权威指南(第3版)