// 题目:统计一个数字在排序数组中出现的次数。

//  比如:排序数组{1。2,3,3,3,3,4。5}和数字3,因为3出现了4次。因此输出4

有一种最简单的算法,遍历。可是有比它效率更高的

先看遍历:

#include <stdio.h>
#include <assert.h> int num_time(int *arr, int len, int a)
{
int i = 0;
int count = 0;
assert(arr != NULL);
for (; i < len; ++i)
{
if (arr[i] == a)
count++;
}
return count;
} int main()
{
int arr[] = { 1, 2, 3, 3, 3, 3, 4, 5 };
int len = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", num_time(arr, len, 3));
return 0;
}

另一种利用二分查找:

#include <stdio.h>

int GetFirstKey(int arr[], int left, int right, int len, int key)
{
int mid;
if (left > right)
{
return -1;
}
mid = left - (left - right) / 2;
if (key == arr[mid])
{
if ((mid > 0 && arr[mid - 1] != key) || mid == 0)
{
return mid;
}
else
{
right = mid - 1;
}
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
return GetFirstKey(arr, left, right, len, key);
} int GetLastKey(int arr[], int left, int right, int len, int key)
{
int mid;
if (left > right)
{
return -1;
}
mid = left - (left - right) / 2;
if (key == arr[mid])
{
if ((mid < len - 1 && arr[mid + 1] != key || mid == len - 1))
{
return mid;
}
else
{
left = mid + 1;
}
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
return GetLastKey(arr, left, right, len, key);
} int main()
{
int brr[] = { 1, 2, 3, 3, 3, 3, 4, 5};
int len = sizeof(brr) / sizeof(brr[0]);
int first = GetFirstKey(brr, 0, len - 1, len - 1, 3);
int last = GetLastKey(brr, 0, len - 1, len - 1, 3);
printf("%d\n", last - first + 1);
return 0;
}

【c语言】统计一个数字在排序数组中出现的次数的更多相关文章

  1. [PHP] 算法-统计一个数字在排序数组中出现的次数的PHP实现

    统计一个数字在排序数组中出现的次数. 1.有序的数组查找,使用二分法 2.二分法查找第一次出现的位置,二分法查找最后一次出现的位置,end - start +1 left=getLeft(data,k ...

  2. php如何实现统计一个数字在排序数组中出现的次数(代码)

    统计一个数字在排序数组中出现的次数. 博客 www.51msk.cn 1.有序的数组查找,使用二分法2.二分法查找第一次出现的位置,二分法查找最后一次出现的位置,end - start +1 left ...

  3. 剑指offer37:统计一个数字在排序数组中出现的次数

    1 题目描述 统计一个数字在排序数组中出现的次数. 2 思路和方法 (1)查找有序数组,首先考虑使用二分查找,使时间复杂度为O(log n).更改二分查找的条件,不断缩小区间,直到区间头和区间尾均为k ...

  4. 【C语言】统计数字在排序数组中出现的次数

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

  5. Go语言实现:【剑指offer】数字在排序数组中出现的次数

    该题目来源于牛客网<剑指offer>专题. 统计一个数字在排序数组中出现的次数. 看到排序数组,要想到用二分查找. 先找到最前面的数字k,再找到最后面的数字k,通过下标求出次数. Go语言 ...

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

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

  7. 【Java】 剑指offer(53-1) 数字在排序数组中出现的次数

    正文 本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 统计一个数字在排序数组中出现的次数.例如输入排序数组{1, ...

  8. 剑指Offer面试题:32.数字在排序数组中出现的次数

    一.题目:数字在排序数组中出现的次数 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 二.解题思路 2 ...

  9. 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找

    题目地址:http://ac.jobdu.com/problem.php?pid=1349 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数 ...

随机推荐

  1. windows sdk编程禁止改变窗体大小

    #include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...

  2. 11-3 re模块

    目录 r 的作用 re模块的常用功能 findall search match split sub 将数字替换成'H' subn 将数字替换成'H',返回元组(替换的结果,替换了多少次) compil ...

  3. mysql安装及navicat连接

    1.下载mysql官方连接:https://dev.mysql.com/downloads/mysql/ 下载成功后,解压到自己想要的路径下并创建my.ini文件和配置环境变量 然后我们在根目录下创建 ...

  4. thinkphp5生成二维码

    1.运用composer下载拓展到vendor下 composer require aferrandini/phpqrcode 2.common.php 里面写生成二维码函数 <?php // ...

  5. vue中axios发送post请求,后端(@RequestParam)接不到参数

    遇到的问题描述 :axios post 请求,后端接收不到参数. 我们的接口是java,用@RequestParam来接收前端的参数 解决方案:使用qs:axios中已经包含有qs,所以无需重新安装, ...

  6. tomcat无法正确解析请求参数

    24-Mar-2018 14:11:20.564 INFO [http-nio-8080-exec-3] org.apache.coyote.http11.Http11Processor.servic ...

  7. 分布式集群算法 memcached 如何实现分布式?

    memcached 是一个”分布式缓存”,然后 memcached 并不像 mongoDB 那 样,允许配置多个节点,且节点之间”自动分配数据”. 就是说--memcached 节点之间,是不互相通信 ...

  8. python3.x Day5 异常处理

    异常处理: 预计可能会发生的异常,明确如果发生,如何处理,不过一般不参与业务逻辑,也不要一次性捕捉全部异常,不然可能程序就不可控了. data={} mmm=[] try: #捕获异常, data[& ...

  9. 【Kafka问题解决】Connection to xxx could not be established. Broker may not be available.

    请检查Kafka的config/server.properties 看看是否有填写 listeners=PLAINTEXT://kafka-host:9092 advertised.listeners ...

  10. angular(转)

    学习之前可以看看 知乎上讨论angularjs优缺点 帮你选择框架的网站 同类主流框架对比 教程 angularjs在慕课网 angularjs在51cto angularjs在图灵社区 社区 Ang ...