数字在排序数组中出现的次数
来源:互联网 发布:文明6 中文补丁 mac 编辑:程序博客网 时间:2024/06/03 17:03
1.问题描述
统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3 由于3在这个数组中出现了4次,因此输出4.(来自《剑指offer》)
2.分析
因为数组是排序的,我们可以通过这个性质分别找到第一个k和最后一个k,然后计算出k的个数。找k的时候,以前二分查找的时候 找到了k ,我们还要判断是不是第一个k或最后一个k,如果不是的话还要继续查找。直至找到第一个k和最后一个k。
3.代码
int GetFirstK(int *array,int start,int end,int k ,int length){ if (array == NULL || start > end ) { return -1; } int middleIndex = (start + end) / 2; int middleData = array[middleIndex]; if (middleData == k) { if ((middleIndex > 0 && array[middleIndex - 1] != k) || middleIndex == 0) { return middleIndex; } else { end = middleIndex -1; } } else if(middleData > k) { end = middleIndex -1; } else { start = middleIndex + 1; } return GetFirstK(array, start, end, k,length); }int GetLastK(int* array,int start,int end,int k,int length){ if (array == NULL || start > end) { return -1; } int middleIndex = (start + end) / 2; int middleData = array[middleIndex]; if (middleData == k) { if ((middleData == k && array[middleIndex + 1] != k) || middleIndex == length - 1) { return middleIndex; } else { start = middleIndex + 1; } } else if(middleData > k) { end = middleIndex - 1; } else { start = middleIndex + 1; } return GetLastK(array, start, end, k,length); }int GetNumberOfKey(int* array,int length,int k){ if (array == NULL || length <= 0) { return 0; } int start = GetFirstK(array, 0, length - 1, k , length); int end = GetLastK(array, 0, length - 1, k, length); int numberOfKey = end - start + 1; if (start > -1 && end > -1) { numberOfKey = end - start + 1; } return numberOfKey;}
0 0
- 【数组8】数字在排序数组中出现的次数
- 【数组4】数字在排序数组中出现的次数
- 数组9:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数(数组)
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 统计一个数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- git/github初级运用自如
- Linux环境下socket编程(转载)
- UVA Lining Up (一条直线上最多的点数)
- android 子线程 Toast
- ACM入门 训练方法
- 数字在排序数组中出现的次数
- Ubuntu中更改所有子文件和子目录所有者权限
- 一步步了解View(一)——LayoutInflater及相关
- label行间距
- jstat jps
- 转:用 Hadoop 计算共生矩阵
- RabbitMQ中 exchange、route、queue的关系
- ps命令 du命令 lsof
- 深入分析Android开机找网延迟