数字在排序数组中出现的次数
2013-09-06 14:23
281 查看
int 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 && data[middleIndex - 1] != k) || middleIndex == 0) return middleIndex; else end = middleIndex - 1; } else if (middleData > k) end = middleIndex - 1; else start = middleIndex + 1; return GetFirstK(data, length, k, start, end); } 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 && data[middleIndex + 1] != k) || middleIndex == length - 1) return middleIndex; else start = middleIndex + 1; } else if (middleData < k) start = middleIndex + 1; else end = 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; }
相关文章推荐
- 每日一道算法题:微软面试题:在排序数组中,找出给定数字出现的次数
- 在排序数组中,找出给定数字的出现次数
- 数字在排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 剑指offer(39):数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数
- 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
- 剑指offer题目——数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 38 数字在排序数组中出现的次数
- 剑指offer——数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 【37】数字在排序数组中出现的次数
- 面试题 38: 数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- 数字再排序数组中出现的次数
- 数字在排序数组中出现的次数
- 剑指Offer: 数字在排序数组中出现的次数、和为S的两个数字、数组中只出现一次的数字