- 转载请注明作者和出处:http://blog.csdn.net/u011475210
 - 代码地址:https://github.com/WordZzzz/Note/tree/master/AtOffer
 - 刷题平台:https://www.nowcoder.com/
 - 题 库:剑指offer
 - 编 者:WordZzzz
 
题目描述
统计一个数字在排序数组中出现的次数。
解题思路
数组是排序的,那就没什么好说的了,直接二分查找。
假设我们给定的数字是2,二分查找可以帮我们找到一个2。然后我们左右两边顺序扫描,找到第一个2和最后一个2。因为要查找的数字在长度为n的数组中有可能出现O(n)次,所以顺序扫描的时间复杂度为O(n)。因此这种算法的效率和从头到尾直接顺序扫描整个数组统计出2的个数是一样的。
我们在这里采用更高效的方法。还是二分法找到一个2,然后我们开始判断,这个2是不是第一个2(或者最后一个2):如果是,那么就返回序列号,如果不是,就继续二分查找。由于二分法查找第一个2和最后一个2在此处的判断条件不一样,所以得分开写。
我们不要拘泥于迭代,也可以试着写写循环嘛。
C++版代码实现
1  | class Solution {  | 
Python版代码实现
1  | # -*- coding:utf-8 -*-  | 
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz