剑指offer 数字在排序数组中出现的次数
2016-03-16 20:31
357 查看
因为有序所以用二分法,分别找到第一个k和最后一个k的下标。时间O(logN)
[/code]
来自为知笔记(Wiz)
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int num=0;
int size=data.size();
if(size>0){
int num1=getfk(data,0,size-1,k);
int num2=getsk(data,0,size-1,k);
if(num1!=-1 &&num2!=-1)
num=num2-num1+1;
}
return num;
}
int getfk(vector<int>&data,int l,int r,int k){
if(l>r)return -1;
int m=(l+r)>>1;
int m_val=data[m];
if(m_val>k)
r=m-1;
else if(m_val<k)
l=m+1;
else{
if((m>0 && data[m-1]!=k)|| m==0)
return m;
else
r=m-1;
}
return getfk(data,l,r,k);
}
int getsk(vector<int>&data,int l,int r,int k){
if(l>r)return -1;
int m=(l+r)>>1;
int m_val=data[m];
if(m_val>k)
r=m-1;
else if(m_val<k)
l=m+1;
else{
if((m<data.size()-1 && data[m+1]!=k)|| m==data.size()-1)
return m;
else
l=m+1;
}
return getsk(data,l,r,k);
}
};
[/code]
来自为知笔记(Wiz)
相关文章推荐
- 剑指offer 数组中只出现一次的数字
- NodeJS实战
- JavaScript 代码规范
- 剑指offer青蛙跳台阶问题
- 剑指offer 旋转数组
- 细谈CSS布局方式
- 原生javascript 简易实现放大镜效果
- 实用的插件:跨浏览器复制jQuery-zclip
- CSSS书写规范
- ABROAD:bootstrap中的dropdown组件改造click为hover
- DatePickerDialog 自定义样式及使用全解
- 【bzoj1013】[JSOI2008]球形空间产生器sphere 高斯消元
- uva10795 A Different Task
- Bootstrap 输入框组
- 使用.net 3.5的DataContractJsonSerializer进行JSON Serialization
- 《剑指offer》——二叉树的下一个结点
- PAT--1115. Counting Nodes in a BST
- JS解析XML--实现省市县级联
- js的几种继承方式
- ZeroC Ice IceGrid Node和IceGrid