数字在排序数组中出现的次数
来源:互联网 发布:蚁群算法优化问题 编辑:程序博客网 时间:2024/05/29 13:16
题目描述 :
统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4.
解法:
使用二分查找的方法分别找出给定数字的开始和结束位置,最坏情况下时间复杂度为O(logn)
代码实现:
#include <stdio.h>#include <malloc.h>//找到排序数组中的第一个Kint GetFirstK(int* data, int length, int k, int start, int end){if(start > end)return -1;int middleIndex = (start + end) / 2;int middleData = data[middleIndex];if(middleData == k){if(middleIndex == 0 || middleIndex > 0 && data[middleIndex - 1] != k)return middleIndex;elseend = middleIndex - 1;}else if(middleData > k)end = middleIndex - 1;elsestart = middleIndex + 1;return GetFirstK(data,length,k,start,end);}//找到数组中最后一个K的位置int GetLastK(int* data, int length, int k, int start, int end){if(start > end)return -1;int middleIndex = (start + end) / 2;int middleData = data[middleIndex];if(middleData == k){if(middleIndex == length -1 || middleIndex < length-1 && data[middleIndex + 1] != k)return middleIndex;elsestart = middleIndex + 1;}else if(middleData < k)start = middleIndex + 1;elseend = middleIndex - 1;return GetLastK(data,length,k,start,end);}int GetNumberOfK(int* data, int length, int k){int number = 0;if(data != NULL && length > 0){int first = GetFirstK(data, length, k, 0, length - 1);int last = GetLastK(data, length, k, 0, length - 1);if(first > -1 && last > -1)number = last - first + 1;}return number;}void main(){int n;while(scanf("%d", &n) != EOF){int* data=(int*)malloc(sizeof(int));for(int i = 0; i < n; i++)scanf("%d", data+i);int k;printf("enter k: ");scanf("%d", &k);int number = GetNumberOfK(data, n, k);printf("数字%d在数组中出现%d次", k,number);}}
0 0
- 【数组8】数字在排序数组中出现的次数
- 【数组4】数字在排序数组中出现的次数
- 数组9:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数(数组)
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 统计一个数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- poj3614 Sunscreen (优先队列+贪心)
- 使用CABasicAnimation实现的动画效果(一)
- hbase 介绍
- 蓝桥杯B六----牌型种数----动态规划问题
- HashMap原理分析
- 数字在排序数组中出现的次数
- 布局之merge的使用
- mysql 高可用集群实验性搭建
- Java finally语句到底是在return之前还是之后执行?
- web开发与IC卡读卡器
- 【解题报告】Educational Codeforces Round 9
- linux下文件同步脚本
- 针对android&ios yuv旋转、镜像、格式转换、裁剪 算法实现
- 在Ubuntu 配置图标程序