#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();
}

从有序数组中找出某个数出现的次数相关推荐

  1. 数据结构与算法--有序数组中找出和为s的两个数字

    有序数组中找和为s的两个数字 题目:输入一个递增排序的数组array, 和一个数字s, 在数组中找出两个数,使得这两个数的和是s,如果有多对,输出一对即可. 最简单方案 双循环,每次获取一个数据,和数 ...

  2. 从一个数组中找出 N 个数,其和为 M 的所有可能--最 nice 的解法

    比起讨论已经存在的大牛,我们更希望有更多有潜力的前端小伙伴成为大牛,只有这样,前端在未来才能够持续不断的发光发热. 故事的背景 这是一个呆萌炫酷吊炸天的前端算法题,曾经乃至现在也是叱咤风云在各个面试场 ...

  3. 改进,从一个数组中找出 N 个数,其和为 M 的所有可能

    特此说明,本文算法改自于<从一个数组中找出 N 个数,其和为 M 的所有可能--最 nice 的解法>一文.本文不同的是,采用二进制正序表示法,这种实现思路更直观.更简单些. 问题 从一个 ...

  4. c++如何输入数组_从一个数组中找出 N 个数,其和为 M 的所有可能最 nice 的解法...

    编者按:本文由前端狂想录公众号授权奇舞周刊转载. 故事的背景 这是一个呆萌炫酷吊炸天的前端算法题,曾经乃至现在也是叱咤风云在各个面试场景中. 可以这样说,有 90% 以上的前端工程师不会做这个题目. ...

  5. 在数组中找出3个数使得它们和为0

    题目: 给定一个集合S,试找出3个数a, b, c,使得a+b+c=0.也即从集合中找出所有的和为0的3个数. 例如:集合S={-1,0, 1, 2, -1, 4},则满足条件的3个数有2对:(-1, ...

  6. 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级

    在两个有序的数组中找第N个数,O(lgm+lgn)级 分类: 算法2009-10-09 20:52 981人阅读 评论(3) 收藏 举报 问题描述: Give a divide and conquer ...

  7. 给出一个分治算法,在一个具有n个数的数组中找出第二个最大元素。给出你算法的时间复杂性

    给出一个分治算法,在一个具有n个数的数组中找出第二个最大元素.给出你算法的时间复杂性. 算法 SECOND_MAX 输入:含有n个元素的数组A,不妨设 n=2^k 输出:该数组中的第二个最大元素 ( ...

  8. 编写一个程序,从10亿个数字的数组中找出100个最大的数字

    本文翻译自:Write a program to find 100 largest numbers out of an array of 1 billion numbers I recently at ...

  9. JS实现 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    题目:(JS实现) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 四种方法如下: 方法一:暴力破解法,和值匹配 //暴力 ...

  10. java,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    标题:java,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 一.示例 二.题解 方法一,暴力法:使用双重for循环,每 ...

最新文章

  1. 解析自动驾驶算法四大模块的问题与后续发展
  2. caffe---ubuntu1604下anaconda2.5的尝试----失败,建议使用系统的python系统,避免各种各样的陷阱...
  3. PCB走线拐弯处锯齿显示与平滑显示
  4. 浏览器访问solr报错:HTTP Status 500 - {msg=SolrCore 'collection1' is not available due to init failure
  5. lucene教程--全文检索技术详解
  6. 如何使用 ABAP 把多个文件打成一个 zip包 -利用 ABAP 标准工具类 cl_abap_zip
  7. linux php mysql 中文_Linux下PHP+MySQL+CoreSeek中文检索引擎配置 | 系统运维
  8. IPython notebook安装指导
  9. mac python2.7升级到3.7_Mac 升级 Python2.7 到 Python3.5
  10. C++ string 成员函数 length() size() 和 C strlen() 的区别
  11. cache log:minzip: zlib inflate call failed (zerr=-3)
  12. 常用的特效功能实现代码
  13. 台风怎么看内存颗粒_入手三星Bdie颗粒内存条,只超到了3866MHz,看样子得换主板了...
  14. 剪辑师的基本素养--了解四种特写类型
  15. 经常问到的前端面试题
  16. Android 抛弃原生MediaPlayer 使用音频框架 StarrySky
  17. Android camera2 框架学习记录
  18. 每日刷题记录 (八)
  19. 2013年第十九届全国青少年信息学奥林匹克联赛初赛
  20. MIT公开课: Python 笔记6 二分法,牛顿-拉夫森方法,列表

热门文章

  1. p2093 [国家集训队]JZPFAR
  2. 使用opennlp进行依存句法分析
  3. Synchronized快
  4. APICloud连接夜神模拟器--博客园老牛大讲堂
  5. 对象的引用传递 ——面向对象3
  6. D3D 扎带 小样本
  7. Vmware+Virtualbox+Ubuntu+debian+USB转串口+kermit
  8. sql server的标识种子列
  9. 有关分组、帧、报文、比特流的问题
  10. 国产计算机设备,国产计算机报价