实现代码:

int GetFirstPosOfDestData(int* pData, int size, int destData, int begin, int end)
{if (nullptr == pData || size < 1) return -1;if (begin > end) return -1; // 未找到int middle = begin + (end - begin) / 2; // 防止溢出,不要使用middle = (begin + end) / 2;if (destData == pData[middle]){// 已经是第一个,或者前一个不等于destDataif (0 == middle || pData[middle - 1] != destData) return middle;// 继续在前面区间查找else end = middle - 1;}else if (destData > pData[middle]) begin = middle + 1;else end = middle - 1;return GetFirstPosOfDestData(pData, size, destData, begin, end);
}

int GetLastPosOfDestData(int* pData, int size, int destData, int begin, int end)
{if (nullptr == pData || size < 1) return -1;if (begin > end) return -1; // 未找到int middle = begin + (end - begin) / 2; // 防止溢出,不要使用middle = (begin + end) / 2;if (destData == pData[middle]){// 已经是最后一个,或者前一个不等于destDataif (end == middle || pData[middle + 1] != destData) return middle;// 继续在后面区间查找else begin = middle + 1;}else if (destData > pData[middle]) begin = middle + 1;else end = middle - 1;return GetLastPosOfDestData(pData, size, destData, begin, end);
}
int GetCountOfDestData(int* pData, int size, int destData)
{if (nullptr == pData || size < 1) return 0;int toalCount = 0;int firstPos = GetFirstPosOfDestData(pData, size, destData, 0, size - 1);int lastPos = GetLastPosOfDestData(pData, size, destData, 0, size - 1);if (firstPos != -1 && lastPos != -1)toalCount = lastPos - firstPos + 1;return toalCount;
}

38. 数字在排序数组中出现的次数(C++版本)相关推荐

  1. 【剑指offer-Java版】38数字在排序数组中出现的次数

    数字在排序数组中出现的次数: 最简单粗暴的方法是O(n^2) 可能的解法可以采用二分,首先根据二分找到给定数字在数组中的位置,然后再左右二分,找到边界(第一个和最后一个),左右边界的差值就是出现次数 ...

  2. 剑指offer——面试题38:数字在排序数组中出现的次数

    剑指offer--面试题38:数字在排序数组中出现的次数 20180906整理 Solution1: [注意]先利用二分查找扎到一个值然后再顺序遍历的做法时间复杂度也是O(n)O(n)O(n),代码也 ...

  3. 面试题整理11 数字在排序数组中出现的次数

    <剑指offer>面试题38: 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在此数组中出现了4次,因此输出4. 分析:看到排 ...

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

    题目描述 统计一个数字在排序数组中出现的次数. 解题思路 暴力求解,没用到排序的已知条件. class Solution { public:int GetNumberOfK(vector<int ...

  5. 【C语言】数字在排序数组中出现的次数(改动)

    //数字在排序数组中出现的次数(改动) //统计一个数字在排序数组中出现的次数.比如:排序数组{1,2,3,3,3.3,4,5}和数字3,因为3出现了4次,因此输出4. #include <st ...

  6. 剑指Offer(Java版):数字在排序数组中出现的次数

    2019独角兽企业重金招聘Python工程师标准>>> 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组为 {1,2,3,3,,3,3,4,5}和数字3,由于3在这个数组中 ...

  7. 《剑指offer》-- 调整数组顺序使奇数位于偶数前面、顺时针打印矩阵、数字在排序数组中出现的次数

    一.调整数组顺序使奇数位于偶数前面: 1.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之 ...

  8. 【剑指offer】数字在排序数组中出现的次数

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27364557 题目描写叙述: 统计一个数字在排序数组中出现的次数. 输入: 每一个測试案例 ...

  9. 《剑指offer》数字在排序数组中出现的次数

    题目:统计一个数字在排序数组中出现的次数. 解析:不要怀疑你的眼睛,也不用怀疑这题目难度,直接干! public class Solution {public int GetNumberOfK(int ...

  10. 统计一个数字在排序数组中出现的次数

    package demo;import java.util.Arrays;/** 题目描述 统计一个数字在排序数组中出现的次数.*/ public class Offer_23 {public int ...

最新文章

  1. python excel绘图-Python excel 画图
  2. 十分钟了解 git 那些 “不常用” 命令
  3. matlab 多个波段,MatLab读取ENVI图像统计多波段图像信息
  4. 舵机任意角度程序_【舵机初动】基于Mind+ Ardunio入门教程10
  5. 强化学习MATLAB代码实现
  6. Kafka 集群搭建
  7. SPSS 探索性因素分析与验证性因素分析的区别【SPSS 034期】
  8. Hex Fiend——mac 下 WinHex的完美替代
  9. 数据科学学习笔记8 --- 分类(有监督的学习)
  10. java 按英文名排序_输入5种水果的英文名称,用java编写一个程序,输出这些水果名称按照字典出现的先后循序输出?...
  11. dell计算机自动开机设置,dell台式电脑定时开机设置教程
  12. 奈奎斯特定理和香农定理
  13. 互联网快讯:国家植物园在北京正式揭牌;极米Z6X Pro、极米H3S获赞赏;人民币兑日元逼近20大关
  14. 用3D打印快速制作软生物电子植入物原型,有助于将大脑连接到电脑
  15. USB电路EMC设计标准电路详解
  16. oracle显示人民币,如何在ORACLE中实现人民币大写的转换
  17. XMind: ZEN 快捷键超强盘点
  18. WPAN、WLAN、WMAN、WWAN无线通讯技术区别
  19. VMS(VELO) tips[转载]
  20. 浅谈我的建站经验之导航设置

热门文章

  1. 微软为 Chrome 带来更流畅的页面滚动效果,来自 Edge
  2. 分布式监控系统Zabbix3.2给异常添加邮件报警
  3. 根据服务端生成的WSDL文件创建客户端支持代码的三种方式
  4. 今天看C++Primer发现的问题
  5. 13.docker exec
  6. 146.PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别
  7. 7.override a layout
  8. java 中wait notify简解
  9. [2019杭电多校第四场][hdu6616]Divide the Stones
  10. Python 学习笔记 - 不断更新!