数字在排序数组中出现的次数
2015-12-10 21:52
393 查看
统计一个数字在排序数组中出现的次数。
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int number=0;
int start=0;
int end=data.size()-1;
if(data.size()!=0){
int first=GetFirstK(data,k,start,end);
int last=GetLastK(data,k,start,end);
if(first>-1&&last>-1)
number=last-first+1;
}
return number;
}
int GetFirstK(vector<int> data ,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,k,start,end);
}
int GetLastK(vector<int> data ,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<data.size()-1&&data[middleIndex+1]!=k)||middleIndex==data.size()-1)
return middleIndex;
else
start=middleIndex+1;
}
else if(middleData<k)
start=middleIndex+1;
else
end=middleIndex-1;
return GetLastK(data,k,start,end);
}
};
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int number=0;
int start=0;
int end=data.size()-1;
if(data.size()!=0){
int first=GetFirstK(data,k,start,end);
int last=GetLastK(data,k,start,end);
if(first>-1&&last>-1)
number=last-first+1;
}
return number;
}
int GetFirstK(vector<int> data ,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,k,start,end);
}
int GetLastK(vector<int> data ,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<data.size()-1&&data[middleIndex+1]!=k)||middleIndex==data.size()-1)
return middleIndex;
else
start=middleIndex+1;
}
else if(middleData<k)
start=middleIndex+1;
else
end=middleIndex-1;
return GetLastK(data,k,start,end);
}
};
相关文章推荐
- MFC-SetWindowPos-位图按钮-扩展对话框-更改Logo
- shell变量数学运算
- 【人月神话】读书笔记第7章 为什么巴比伦塔会失败
- 两个链表的第一个公共结点
- Linux基本命令操作
- tableView 详细使用方法
- 3DMAX 合并镜像物体
- 读书笔记 -- 004_数据预处理_数据规范化
- DelphiXe5中的双向绑定(使用使用TBindScope和TBindExpression,并覆盖AfterConstruction函数)
- JavaScript面向对象(01)--函数
- hdoj 找新朋友 1286 (欧拉函数入门)
- 网页切图的技巧及经验总结
- 网页切图的技巧及经验总结
- 为linux主机安装应用程序
- 证明静态函数在main函数运行前就运行了
- 关于Android Log的一些思考
- java解惑--谜题12:ABC
- 【html】【12】特效篇--轮播图
- 第一个只出现一次的字符
- Ceph块设备