数字在排序数组中出现的次数
2015-09-01 22:28
218 查看
采用二分查找的方法,一旦找到,left++,right--,--middle++,扩展查找。
开始while(left<right),当n=1时不能进入循环,应写while(left<=right)
开始while(left<right),当n=1时不能进入循环,应写while(left<=right)
class Solution { public: int GetNumberOfK(vector<int> data ,int k) { int n=data.size(); if(n<1) return 0; int left=0; int right=n-1; int middle=0; int count=0; while(left<=right){ if(data[left]==k){ while(data[left]==k&&left<n){ left++; count++; } return count; } if(data[right]==k){ while(data[right]==k&&right>=0){ right--; count++; } return count; } middle=left+(right-left)/2; if(data[middle]==k){ count++; int m=middle-1; while(data[m]==k&&m>=0){ m--; count++; } m=middle+1; while(data[m]==k&&m<n){ m++; count++; } return count; } if(data[middle]>k) right=middle-1; else left=middle+1; } return count; } };
相关文章推荐
- [Computer Network] Tcp慢启动和拥塞控制
- 深度学习史上最全总结(文末有福利)
- poj 1698 Alice's Chance(基础网络流·建图)
- 自学Java系列 笔记2 Java集合2
- 自学Java系列 笔记2 Java集合1
- String to Palindrome
- NSString常用的方法
- hadoop 集群 加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令
- ubuntu virtualbox 网络模式Host-only
- 网络安全-iptables防火墙
- 自学Java系列 笔记2 异常处理1
- ascii码表
- python 自动补全
- git常用命令--简洁版
- android性能优化
- vim简单操作
- 几个ios正则表达式 判断邮箱 手机号码 身份证号码
- AFNetWorking
- CI使用Memcached
- 面向对象设计的六大原则