从有序数组中找出某个数出现的次数
#include "stdio.h"
int bin_search(int array[], int key, int length, int loc_flag) {
int low = 0, high = length -1;
int mid = 0;
int last = -1; /*用last记录最终的位置loc_a或loc_b*/
while (low<=high) {
mid = (low+high)/2;
if (array[mid]<key) {
low = mid+1;
} else if (array[mid]>key) {
high = mid-1;
} else { /*找到了key*/
last = mid; /*记录下当前key的位置*/
if (loc_flag == 0) {
high = mid - 1; /*查找loc_a,调整high值继续在左边查找*/
} else {
low = mid + 1; /*查找loc_b,调整low值继续在右边查找*/
}
}
}
return last; /*返回last,它是最终的位置loc_a或loc_b*/
}
int getDataCount(int array[], int length, int key) {
int loc_a, loc_b;
loc_a = bin_search(array,key,length,0);
loc_b = bin_search(array,key,length,1);
if (loc_a == -1 || loc_b == -1) {
return 0; /*数组array中没有key值,返回0*/
} else {
return loc_b-loc_a+1; /*返回key出现的次数*/
}
}
void main() {
int array[] = {0,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,6,9,12};
printf("There are %d data 5 in this array\n",getDataCount(array,19,5));
getchar();
}
从有序数组中找出某个数出现的次数相关推荐
- 数据结构与算法--有序数组中找出和为s的两个数字
有序数组中找和为s的两个数字 题目:输入一个递增排序的数组array, 和一个数字s, 在数组中找出两个数,使得这两个数的和是s,如果有多对,输出一对即可. 最简单方案 双循环,每次获取一个数据,和数 ...
- 从一个数组中找出 N 个数,其和为 M 的所有可能--最 nice 的解法
比起讨论已经存在的大牛,我们更希望有更多有潜力的前端小伙伴成为大牛,只有这样,前端在未来才能够持续不断的发光发热. 故事的背景 这是一个呆萌炫酷吊炸天的前端算法题,曾经乃至现在也是叱咤风云在各个面试场 ...
- 改进,从一个数组中找出 N 个数,其和为 M 的所有可能
特此说明,本文算法改自于<从一个数组中找出 N 个数,其和为 M 的所有可能--最 nice 的解法>一文.本文不同的是,采用二进制正序表示法,这种实现思路更直观.更简单些. 问题 从一个 ...
- c++如何输入数组_从一个数组中找出 N 个数,其和为 M 的所有可能最 nice 的解法...
编者按:本文由前端狂想录公众号授权奇舞周刊转载. 故事的背景 这是一个呆萌炫酷吊炸天的前端算法题,曾经乃至现在也是叱咤风云在各个面试场景中. 可以这样说,有 90% 以上的前端工程师不会做这个题目. ...
- 在数组中找出3个数使得它们和为0
题目: 给定一个集合S,试找出3个数a, b, c,使得a+b+c=0.也即从集合中找出所有的和为0的3个数. 例如:集合S={-1,0, 1, 2, -1, 4},则满足条件的3个数有2对:(-1, ...
- 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
在两个有序的数组中找第N个数,O(lgm+lgn)级 分类: 算法2009-10-09 20:52 981人阅读 评论(3) 收藏 举报 问题描述: Give a divide and conquer ...
- 给出一个分治算法,在一个具有n个数的数组中找出第二个最大元素。给出你算法的时间复杂性
给出一个分治算法,在一个具有n个数的数组中找出第二个最大元素.给出你算法的时间复杂性. 算法 SECOND_MAX 输入:含有n个元素的数组A,不妨设 n=2^k 输出:该数组中的第二个最大元素 ( ...
- 编写一个程序,从10亿个数字的数组中找出100个最大的数字
本文翻译自:Write a program to find 100 largest numbers out of an array of 1 billion numbers I recently at ...
- JS实现 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
题目:(JS实现) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 四种方法如下: 方法一:暴力破解法,和值匹配 //暴力 ...
- java,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
标题:java,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 一.示例 二.题解 方法一,暴力法:使用双重for循环,每 ...
最新文章
- 解析自动驾驶算法四大模块的问题与后续发展
- caffe---ubuntu1604下anaconda2.5的尝试----失败,建议使用系统的python系统,避免各种各样的陷阱...
- PCB走线拐弯处锯齿显示与平滑显示
- 浏览器访问solr报错:HTTP Status 500 - {msg=SolrCore 'collection1' is not available due to init failure
- lucene教程--全文检索技术详解
- 如何使用 ABAP 把多个文件打成一个 zip包 -利用 ABAP 标准工具类 cl_abap_zip
- linux php mysql 中文_Linux下PHP+MySQL+CoreSeek中文检索引擎配置 | 系统运维
- IPython notebook安装指导
- mac python2.7升级到3.7_Mac 升级 Python2.7 到 Python3.5
- C++ string 成员函数 length() size() 和 C strlen() 的区别
- cache log:minzip: zlib inflate call failed (zerr=-3)
- 常用的特效功能实现代码
- 台风怎么看内存颗粒_入手三星Bdie颗粒内存条,只超到了3866MHz,看样子得换主板了...
- 剪辑师的基本素养--了解四种特写类型
- 经常问到的前端面试题
- Android 抛弃原生MediaPlayer 使用音频框架 StarrySky
- Android camera2 框架学习记录
- 每日刷题记录 (八)
- 2013年第十九届全国青少年信息学奥林匹克联赛初赛
- MIT公开课: Python 笔记6 二分法,牛顿-拉夫森方法,列表