【剑指offer-解题系列(38)】数字在排序数组中出现的次数
2017-05-29 22:25
399 查看
题目描述
统计一个数字在排序数组中出现的次数。分析
实现二分查找的upper函数和lower函数
代码实现
int GetNumberOfK(vector<int> data ,int k) {
if(data.size()<=0)
return 0;
int a=lower( data , k, 0, data.size()-1);
if(a==-1)
return 0;
int b=upper( data , k, 0, data.size()-1);
return b-a+1;
}
int upper(vector<int> &data ,int k, int start, int end){
if(start == end ){
if(data[end] == k)return end;
else return -1;
}
int mid = (start + end)/2;
if( data[mid] > k )return upper( data , k , start, mid);
if( data[mid] < k )return upper( data , k , mid+1, end);
if( data[mid] == k ){
if( mid<end&&data[mid+1]!=k )
return mid;
else
return upper( data , k , mid+1, end);
}
return -1;
}
int lower(vector<int> &data ,int k, int start, int end){
if(start == end ){
if(data[end] == k)return end;
else return -1;
}
int mid = (start + end)/2;
if( data[mid] > k )return lower( data , k , start, mid);
if( data[mid] < k )return lower( data , k , mid+1, end);
if( data[mid] == k ){
if( mid>start&&data[mid-1]!=k )
return mid;
else
return lower( data , k , start, mid);
}
return -1;
}
相关文章推荐
- 剑指offer 38题 【知识迁移能力】数字在排序数组中出现的次数
- 剑指offer-面试题38 : 数字在排序数组中出现的次数
- 剑指offer之面试题38数字在排序数组中出现的次数
- 剑指Offer:面试题38 数字在排序数组中出现的次数
- 剑指offer 38 数字在排序数组中出现的次数
- 剑指offer38:数字在排序数组出现的次数
- 剑指offer 面试题38 数字在排序数组中出现的次数
- [剑指offer][面试题38]数字在排序数组中出现的次数
- 剑指Offer_面试题38_数字在排序数组中出现的次数
- 【剑指offer 面试题38】数字在排序数组中出现的次数
- 剑指offer: 38 数字在排序数组中出现的次数
- 【剑指offer-Java版】38数字在排序数组中出现的次数
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 剑指offer——面试题38:数字在排序数组中出现的次数
- 【剑指offer】题目38 数字在排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 剑指offer--面试题38:数字在排序数组中出现的次数
- 剑指offer面试题38:数字在已排序数组中出现的次数
- 剑指offer38题(数字在排序数组中出现的次数)
- 剑指 offer代码解析——面试题38数字在排序数组中出现的次数