博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Visual C++2013拆解世界五百强面试题--题11-查找数字出现次数
阅读量:5120 次
发布时间:2019-06-13

本文共 1059 字,大约阅读时间需要 3 分钟。

在排序数组中,找出给定数字出现的次数比如{ 1, 2, 2, 2, 3}中2的出现次数是3次

我们可使用二分查找发,分别查找出2最先出现的位置和最后出现的位置相减即可。

下面是上代码:

#include 
//二分法获取元素最后出现的位置,可能在元素的下一位int GetHigh(int array[], int size, int key){ int low = 0, high = size - 1; while (low < high) { int mid = (low + high) / 2; if (array[mid] <= key) { low = mid+1; } else { high = mid; } } return low;}//二分法获取元素最先出现的位置,可能在元素的前一位int GetLow(int array[], int size, int key){ int low = 0, high = size - 1; while (low < high) { int mid = (low + high + 1) / 2; if (array[mid] >= key) { high = mid-1; } else { low = mid; } } return high;}//计算key出现总次数int GetCount(int array[], int size, int key){ int high = GetHigh(array, size, key); int low = GetLow(array, size, key); int count = high - low + 1; if (array[high] != key) count--; if (array[low] != key) count--; return count;}int arr[] = { 1, 2, 2, 2, 3};int main(){ //打印出2在数组中出现的次数 printf("出现次数:%d \n", GetCount(arr, 5, 2)); return 0;}
运行效果如图:

如果有什么问题和疑问可以在下面留言互相探讨。

原题我已经上传到这里了 ,

解压密码为 c.itcast.cn

转载于:https://www.cnblogs.com/new0801/p/6177585.html

你可能感兴趣的文章
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
Java 多态 虚方法
查看>>
万能的SQLHelper帮助类
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
类库与框架,强类型与弱类型的闲聊
查看>>
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>