当前位置: 首页 > news >正文

剑指offer 数字在排序数组中出现的次数

题目描述

统计一个数字在排序数组中出现的次数。
 
思路:这题有两个点可以想到使用二分法,
1)排序的数组;
2)暴力求解的复杂度是O(n),要想优化只有二分法的logn级别。
 
和使用二分法找到某个数出现的区间一样,只不过要多一个变量判断是否找到这个数,因为如果不存在这个数那么两次二分法找到的位置和元素只有一个出现最后一个位置的答案是一样的,所以要多用一个变量进行判断。
class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        if(data.size() == 0){
            return 0;
        }
        int start = 0,end = data.size() - 1;
        int mid;
        bool firstFindIt = true;
        while(start + 1 < end){
            mid = start + (end - start) / 2;
            if(data[mid] == k){
                end = mid;
            }
            else if(data[mid] < k){
                start = mid;
            }
            else{
                end = mid;
            }
        }
        int firstPos = 0;
        if(data[start] == k){
            firstPos = start;
        }
        else if(data[end] == k){
            firstPos = end;
        }
        else{
            firstFindIt = false;
        }
        
        start = 0;
        end = data.size() - 1;        
        while(start + 1 < end){
            mid = start + (end - start) / 2;
            if(data[mid] == k){
                start = mid;
            }
            else if(data[mid] < k){
                start = mid;
            }
            else{
                end = mid;
            }
            
        }
        int lastPos = 0;
        bool lastFindIt = true;
        if(data[end] == k){
            lastPos = end;            
        }
        else if(data[start] == k){
            lastPos = start;
        }
        else{
            lastFindIt = false;
        }
        if(firstFindIt == true && lastFindIt == true){
            return lastPos - firstPos + 1;
        }
                
        return 0;
        
    }
};

 

转载于:https://www.cnblogs.com/dingxiaoqiang/p/7493431.html

相关文章:

  • 打造vim IDE
  • linux挂载远程windows服务器上的ISO,给内网的服务器安装软件
  • 开源的API集成测试工具 v0.1.2 - 增强体验
  • ActiveMQ笔记——技术点汇总
  • 第三百八十二节,Django+Xadmin打造上线标准的在线教育平台—xadmin管理员详情页面布局,导航图标设置...
  • POJ 3134 - Power Calculus
  • hdu 6201 transaction transaction transaction
  • java的(PO,VO,TO,BO,DAO,POJO)解释
  • Cent OS服务器配置(JDK+Tomcat+MySQL)
  • python库基础练习
  • 可以直接cat 多个fq.gz压缩文件
  • 条件、循环、函数定义 练习
  • 深入学习微框架:Spring Boot
  • 原创:mysql下载 实战 最强最全的无脑白痴版 给小白的爱
  • sql语句执行碰到的问题
  • 网络传输文件的问题
  • 2017届校招提前批面试回顾
  • C语言笔记(第一章:C语言编程)
  • ES2017异步函数现已正式可用
  • go语言学习初探(一)
  • maya建模与骨骼动画快速实现人工鱼
  • spring boot 整合mybatis 无法输出sql的问题
  • TypeScript实现数据结构(一)栈,队列,链表
  • vue-router 实现分析
  • 翻译:Hystrix - How To Use
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 基于 Babel 的 npm 包最小化设置
  • 理解在java “”i=i++;”所发生的事情
  • 什么是Javascript函数节流?
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 以太坊客户端Geth命令参数详解
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #stm32驱动外设模块总结w5500模块
  • (1)虚拟机的安装与使用,linux系统安装
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (汇总)os模块以及shutil模块对文件的操作
  • (一)Linux+Windows下安装ffmpeg
  • (一)python发送HTTP 请求的两种方式(get和post )
  • . Flume面试题
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • @Transactional 详解
  • @Transient注解
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [android] 手机卫士黑名单功能(ListView优化)
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [bzoj1324]Exca王者之剑_最小割
  • [codevs 2822] 爱在心中 【tarjan 算法】
  • [Contest20180313]灵大会议