面试题38:数字在排序数组中出现的次数
来源:互联网 发布:蚂蜂窝连app接不到网络 编辑:程序博客网 时间:2024/05/16 11:47
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数字中出现了4次,因此输出4。
算法思路:因为数组有序,利用二分查找的思想,先找出第一次出现的位置first,再找出最后一次出现的位置last,然后用last-first+1就是出现的次数。
#include <iostream> using namespace std; //查找K第一次出现的位置int GetFirstK(int * data,int length,int k ,int start,int end){if(start>end)return -1;int mid=(start+end)/2;//如果中间的数等于kif(data[mid]==k){//如果mid不为0并且前面那个值不为K,或者mid是第一个数字说明K第一次出现if((mid>0&&data[mid-1]!=k)||mid==0){return mid;}//否则K第一次出现的位置应该在mid左边,向前查找end=mid-1;}else if(data[mid]>k){//如果当前值大于K,说明K在mid之前end=mid-1;}else{start=mid+1;}return GetFirstK(data,length,k,start,end);}//查找K最后一次出现的位置int GetLastK(int * data,int length,int k ,int start,int end){if(start>end)return -1;int mid=(start+end)/2;//如果中间的数等于kif(data[mid]==k){//如果mid不为0并且后面那个值不为K,或者mid是最后一个数字说明K最后一次出现if((mid<end&&data[mid+1]!=k)||mid==end){return mid;}//否则K最后一次出现的位置应该在mid右边,向前查找start=mid+1;}else if(data[mid]>k){//如果当前值大于K,说明K在mid之前end=mid-1;}else{start=mid+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 data[]={1,2,3,3,3,3,4,5};cout<<GetNumberOfK(data,8,3)<<endl; return 0; }
0 0
- 【面试题】数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- [剑指offer][面试题38]数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- 剑指Offer:面试题38 数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- 剑指offer 面试题38—数字在排序数组中出现的次数
- 《剑指Offer》学习笔记--面试题38:数字在排序数组中出现的次数
- 【剑指Offer学习】【面试题38:数字在排序数组中出现的次数】
- 面试题38_数字在排序数组中出现的次数
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 剑指offer-面试题38:数字在排序数组中出现的次数
- 剑指offer之面试题38数字在排序数组中出现的次数
- 剑指offer面试题38:数字在已排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 剑指Offer----面试题38:数字在排序数组中出现的次数
- The incident LOST_EVENTS occured on the master. Message: error writing to the binary log, Error_code
- 持续集成1---初步
- iOS计算中英文混合字符串长度的方法
- Nagios监控mysql从库报错: libmysqlclient.so.18: cannot open shared object file: No such
- android之adb
- 面试题38:数字在排序数组中出现的次数
- [mysqldumpslow 报错] Died at /usr/local/mysql/bin/mysqldumpslow line 161, <> chunk 236.
- Android开源项目——工具库篇
- spring kaptcha 验证码使用
- [leetcode] 55.Jump Game
- HAOI2015 解题报告
- MySQL通过自增一列在Select ... into outfile...里面实现CSV导出带字段的效果
- poj 1606 bfs方法
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction