数字在数组中出现的次数
目:统计一个数字k在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,输出4次
方案一:扫描数组,记录第一个出现的k和最后一个k中间有多少个,时间复杂度为O(n)
方案二:由于数组是有序的,那么我们可以利用二分的思想,求出k在数组中的第一个位置和最后位置相减即可。时间复杂度为O(logN)
注意严格按照良好的C++编码风格
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- //规定没有找到返回-1
- int GetFirstIndex(int *arrNum, int left, int right, int k){
- if(arrNum == NULL || left > right){
- return -1;
- }
- while(left <= right){
- int mid = (left+right)>>1;
- if(arrNum[mid] > k){
- right = mid-1;
- }
- else if(arrNum[mid] < k){
- left = mid+1;
- }
- else{
- if((mid > 0) && (arrNum[mid-1] == k)){
- right = mid-1;
- }
- else{
- return mid;
- }
- }
- }
- return -1;
- }
- //规定没有找到返回-1
- int GetLastIndex(int *arrNum, int left, int right, int k){
- if(arrNum == NULL || left > right){
- return -1;
- }
- while(left <= right){
- int mid = (left+right)>>1;
- if(arrNum[mid] > k){
- right = mid-1;
- }
- else if(arrNum[mid] < k){
- left = mid+1;
- }
- else{
- if((mid < right-1) && (arrNum[mid+1] == k)){
- left = mid+1;
- }
- else{
- return mid;
- }
- }
- }
- return -1;
- }
- int main(){
- int arrNum[] = {1,2,3,3,3,3,4,5};
- //求出第一个和最后一个位置
- int firstIndex = GetFirstIndex(arrNum, 0, 7, 3);
- int lastIndex = GetLastIndex(arrNum, 0, 7, 3);
- if(firstIndex != -1 && lastIndex != -1){
- cout<<(lastIndex-firstIndex+1)<<endl;
- }
- else{
- cout<<-1<<endl;
- }
- return 0;
- }
数字在数组中出现的次数相关推荐
- 算法--微软面试:指定数字在数组中出现的次数
Q题目 在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次. Answer解法 这道题要求出结果不难,但要求最有解的话,就需要花费一番功夫了.常见解法有如 ...
- 【剑指offer】Q38:数字在数组中出现的次数
与折半查找是同一个模式,不同的是,在这里不在查找某个确定的值,而是查找确定值所在的上下边界. def getBounder(data, k, start, end, low_bound = False ...
- 剑指offer:数字在排序数组中出现的次数
题目描述 统计一个数字在排序数组中出现的次数. 解题思路 暴力求解,没用到排序的已知条件. class Solution { public:int GetNumberOfK(vector<int ...
- 【剑指offer-Java版】38数字在排序数组中出现的次数
数字在排序数组中出现的次数: 最简单粗暴的方法是O(n^2) 可能的解法可以采用二分,首先根据二分找到给定数字在数组中的位置,然后再左右二分,找到边界(第一个和最后一个),左右边界的差值就是出现次数 ...
- 面试题整理11 数字在排序数组中出现的次数
<剑指offer>面试题38: 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在此数组中出现了4次,因此输出4. 分析:看到排 ...
- 【C语言】数字在排序数组中出现的次数(改动)
//数字在排序数组中出现的次数(改动) //统计一个数字在排序数组中出现的次数.比如:排序数组{1,2,3,3,3.3,4,5}和数字3,因为3出现了4次,因此输出4. #include <st ...
- 剑指Offer(Java版):数字在排序数组中出现的次数
2019独角兽企业重金招聘Python工程师标准>>> 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组为 {1,2,3,3,,3,3,4,5}和数字3,由于3在这个数组中 ...
- 《剑指offer》-- 调整数组顺序使奇数位于偶数前面、顺时针打印矩阵、数字在排序数组中出现的次数
一.调整数组顺序使奇数位于偶数前面: 1.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之 ...
- 【剑指offer】数字在排序数组中出现的次数
转载请注明出处:http://blog.csdn.net/ns_code/article/details/27364557 题目描写叙述: 统计一个数字在排序数组中出现的次数. 输入: 每一个測试案例 ...
最新文章
- linux 增加 ip_conntrack_max 造成 内核内存问题
- 用python编制一个的类_常见面试题整理--Python概念篇
- java开发常见异常_最常见的Java异常及其对Java开发人员的评价
- 第十二届蓝桥杯A组省赛试题 I: 双向排序(Java)
- MySQL通过接口导入hive_利用Sqoop将MySQL数据导入Hive中
- 20162312 2016-2017-2《Java程序设计》课程总结
- C语言和数据结构_1
- Emacs下使用Stardict
- 佳博打印机如何设置热敏打印
- 使用百度图像识别时,提示错误“No address associated with hostname”
- Windows系统设置共享文件夹及访问共享文件夹
- 【随机算法梗概】遗传算法通俗的讲解案例~~
- 程序猿520python表白利器——丘比特之箭
- python爬虫(十七)12306案例
- 转置-置换-向量空间R
- ORAN专题系列-18:5G O-RAN FrontHaul前传接口互操作性测试规范IOT概述与总体架构
- Nature Metabolism I 衰老的单细胞组学研究进展及展望
- linux通过以太网线上网,开发板通过以太网卡的互联网连接尝试
- SmartPhone手机上查看QQ天气预报
- 安全狗php站点404,开启安全狗响应内容保护导致404返回200状态码的解决办法
热门文章
- 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
- 【TCP/IP 协议】 TCP/IP 基础
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
- I/O:OutputStream
- 进击的新版NavMesh系统:看我飞檐走壁
- Java(CS)请求分流
- 【转】每天一个linux命令(50):crontab命令
- (转)一个带自定义分页,排序功能的DATAGRID控件(公开源码)
- OpenGL透视投影函数gluPerspective的参数含义之解析(图示)
- 基于PyTorch的GAN框架TorchGAN:用架构级API轻松定制GAN项目