剑指offer面试题38:数字在排序数组中出现的次数
2016-07-26 19:38
585 查看
#include "iostream" using namespace std; 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; } int main() { int a[] = { 2,3,4,5,5,5,5,6,7,8 }; cout << GetNumberOfK(a, 10, 5); system("pause"); return 0; }
相关文章推荐
- 一个关于if else容易迷惑的问题
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- C#动态调整数组大小的方法
- Lua中调用C++函数示例
- 详解Lua中的数组概念知识
- Lua教程(一):在C++中嵌入Lua脚本
- Perl中的列表和数组学习笔记
- Lua教程(二):C++和Lua相互传递数据示例
- 一道sql面试题附答案
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧