- 转载请注明作者和出处: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