/*
题目:
统计一个数字在排序数组中出现的次数。
*/
/*
思路:
1、从前往后遍历,时间复杂度O(n)。
2、二分查找到目标数字target,向前向后遍历,时间复杂度O(n)。
3、利用二分法,递归找到数字出现的第一个位置和最后一个位置,时间复杂度O(logn)。
*/
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map> using namespace std; int getFirstOfK(vector<int> &A,int start,int end, int target){
if(start > end) return -1; int mid = (start + end) / 2;
if(A[mid] > target){
return getFirstOfK(A,start,mid-1,target);
}else if(A[mid] < target){
return getFirstOfK(A,mid+1,end,target);
}else{
if(mid == 0 || A[mid-1] != target){
return mid;
}else{
return getFirstOfK(A,start,mid-1,target);
}
}
} int getLastOfK(vector<int> &A,int start,int end,int target){
if(start > end) return -1; int mid = (start+end) / 2;
if(A[mid] > target){
return getLastOfK(A,start,mid-1,target);
}else if(A[mid] < target){
return getLastOfK(A,mid+1,end,target);
}else{
if(mid == end || A[mid+1] != target){
return mid;
}else{
return getLastOfK(A,mid+1,end,target);
}
}
} int getNumbersOfK(vector<int> &A, int target){
int first = getFirstOfK(A,0,A.size()-1,target);
int last = getLastOfK(A,0,A.size()-1,target); if(last != -1 && first != -1){
return last - first + 1;
}
return 0; } int main(){
vector<int> a = {1,1,3,4,4,4,5};
cout<<getNumbersOfK(a,1);
}

  

最新文章

  1. 《jQuery判断radio、checkbox、select 是否选中和设置选中问题以及获取选中值》总结
  2. 剑指Offer面试题:10.数值的整数次方
  3. Tableau(数据抽取)
  4. LeetCode 371. Sum of Two Integers
  5. 【Python】pip国内安装源
  6. JBOSS内存参数详解
  7. SQLServer 批量插入数据的两种方法
  8. 。net 添加或获取文件关联
  9. rsyslog 日志统一搜集&message格式
  10. 【hadoop】mapreduce原理总结
  11. zipline tradingcalendar
  12. Converting Storyboard from iPhone to iPad
  13. myeclipse快速开发配置
  14. 如何用Java语言向串口读写数据
  15. Spark standalone安装(最小化集群部署)
  16. [c#]asp.net开发微信公众平台(5)微信图文消息
  17. socket在windows下和linux下的区别
  18. 用div画三角/矩形/圆
  19. LeetCode 797. All Paths From Source to Target
  20. Kubernetes 笔记 02 demo 初体验

热门文章

  1. 死磕mysql(4)
  2. Net Core 中WebAPI有关 Session的设置,及获取
  3. ajax实现文本框的联想功能
  4. 动手学习Pytorch(7)--LeNet
  5. HTTP&amp;HTTPS协议详解之HTTP篇
  6. JVM性能优化系列-(4) 编写高效Java程序
  7. 2019SACC中国系统架构师大会 day1总结
  8. lwip的内存管理
  9. 图解css3学习笔记
  10. mybatis 通过配置父类数据源连接和关闭数据,进行junit单元测试