剑指offer:数字在排序数组中出现的次数
题目描述:
统计一个数字在排序数组中出现的次数。
思路分析:
1. 直观思路是直接遍历一遍,统计。复杂度也只要O(n)。
2. 显然这道题要考察的内容不这么简单,实际上考虑二分的思想来完成。分别二分查找第一个k和最后一个k。具体来说,利用二分查找思想,找到k,再判断当前的前一个是否为k或是否为第一个元素,若是,则返回;否则即第一个k在前面,则右边界r左移,继续递归查找。对于最后一个k的查找思路类似。
代码:
思路二:
 class Solution {
 public:
     int GetFirstK(vector<int>data, int k, int l, int r)
     {
         if(l>r)
             return -;
         int mid = (l+r)/;
         if(data[mid]>k)
         {
             r = mid-;
         }
         else if(data[mid]<k)
         {
             l = mid+;
         }
         else
         {
             if((mid> && data[mid-]!=k) || mid==)
                 return mid;
             else
                 r = mid-;
         }
         return GetFirstK(data, k, l, r);
     }
     int GetLastK(vector<int>data, int k, int l, int r)
     {
         if(l>r)  //递归出口
             return -;
         int mid = (l+r)/;
         if(data[mid]>k)
         {
             r = mid - ;
         }
         else if(data[mid]<k)
         {
             l = mid + ;
         }
         else
         {
             if((mid<data.size()-&&data[mid+]!=k) || mid == data.size()- )
                 return mid;
             else
                 l = mid+;
         }
         return GetLastK(data, k, l, r);
     }
     int GetNumberOfK(vector<int> data ,int k) {
         if(data.size()<=)
             return ;
         int first = GetFirstK(data, k, , data.size()-);
         int last = GetLastK(data, k, , data.size()-);
         if(first==- && last ==-)
             return ;
         else
             return last-first+;
     }
 };
剑指offer:数字在排序数组中出现的次数的更多相关文章
- 剑指Offer——数字在排序数组中出现的次数
		
题目描述: 统计一个数字在排序数组中出现的次数. 分析: 二分变形.二分查找最左边和最右边k的位置,然后相减加一就是结果. 代码: class Solution { public: int GetNu ...
 - 用java刷剑指offer(数字在排序数组中出现的次数)
		
题目描述 统计一个数字在排序数组中出现的次数. 牛客网链接 java代码 //看见有序就用二分法 public class Solution { public int GetNumberOfK(int ...
 - 剑指 Offer——数字在排序数组中出现的次数
		
1. 题目 2. 解答 时间复杂度为 \(O(n)\) 的算法,顺序遍历数组,当该数字第一次出现时开始记录次数. class Solution { public: int GetNumberOfK(v ...
 - 剑指offer 数字在排序数组中出现的次数
		
因为有序 所以用二分法,分别找到第一个k和最后一个k的下标.时间O(logN) class Solution { public: int GetNumberOfK(vector<int> ...
 - 剑指offer--34.数字在排序数组中出现的次数
		
时间限制:1秒 空间限制:32768K 热度指数:209611 本题知识点: 数组 题目描述 统计一个数字在排序数组中出现的次数. class Solution { public: int GetNu ...
 - 剑指Offer-36.数字在排序数组中出现的次数(C++/Java)
		
题目: 统计一个数字在排序数组中出现的次数. 分析: 给定一个已经排好序的数组,统计一个数字在数组中出现的次数. 那么最先想到的可以遍历数组统计出现的次数,不过题目给了排序数组,那么一定是利用了排序这 ...
 - 剑指Offer36 数字在排序数组中出现的次数
		
/************************************************************************* > File Name: 36_Number ...
 - 剑指offer38 数字在排序数组中出现的次数
		
这种方法没用迭代,而是使用了循环的方式 class Solution { public: int GetNumberOfK(vector<int> data ,int k) { if(da ...
 - 剑指offer——56在排序数组中查找数字
		
题目描述 统计一个数字在排序数组中出现的次数. 题解: 使用二分法找到数k然后向前找到第一个k,向后找到最后一个k,即可知道有几个k了 但一旦n个数都是k时,这个方法跟从头遍历没区别,都是O(N) ...
 - 剑指offer-数字在排序数组中出现的次数-数组-python
		
题目描述 统计一个数字在排序数组中出现的次数. python 内置函数 count()一行就能搞定 解题思路 二分查找到给定的数字及其坐标.以该坐标为中点,向前向后找到这个数字的 始 – 终 ...
 
随机推荐
- Spring+Velocity+Mybatis入门(step by step)
			
一.开发工具 开发过程中使用的操作系统是OS X,关于软件安装的问题请大家移步高效的Mac环境设置. 本文是我对自己学习过程的一个回顾,应该还有不少问题待改进,例如目录的设置.编码习惯和配置文件的处理 ...
 - 图说jdk1.8新特性(1)--- 函数式接口
			
函数式接口 总结起来就以下几点: 如果一个接口要想成为函数接口(函数接口可以直接用lambda方式简化),则必须有且仅有一个抽象的方法(非default和static) 可以通过注解@Function ...
 - 基于GDI显示png图像
			
intro 先前基于GDI已经能够显示BITMAP图像:windows下控制台程序实现窗口显示 ,其中BMP图像是使用LoadImage()这一Win32 API函数来做的.考虑到LoadImage( ...
 - EFK(Elasticsearch+Filebeat+Kibana)收集容器日志
			
介绍 Elasticsearch 是一个实时的.分布式的可扩展的搜索引擎,允许进行全文.结构化搜索,它通常用于索引和搜索大量日志数据,也可用于搜索许多不同类型的文档. Beats 是数据采集的得力工具 ...
 - linux服务器管理常用命令
			
1.ps命令 (Processes Status) ps这个命令是查看系统进程,ps 是显示瞬间行程的状态,并不动态连续. ==============ps 的参数说明================ ...
 - spring cloud (七)  Config server基于svn配置
			
1 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
 - 关于base64编码Encode和Decode编码的几种方式
			
关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便 ...
 - Codeforces H. Malek Dance Club(找规律)
			
题目描述: Malek Dance Club time limit per test 1 second memory limit per test 256 megabytes input standa ...
 - python测试开发django-rest-framework-63.基于函数的视图(@api_view())
			
前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...
 - P1941 飞扬的小鸟[dp]
			
题目描述 Flappy Bird是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣 ...