[剑指offer]数字在排序数组中出现的次数
来源:互联网 发布:联通软件研究院怎么样 编辑:程序博客网 时间:2024/04/30 05:17
题目描述
统计一个数字在排序数组中出现的次数。
分析:排序数组找数字,当然想到用二分,用两次二分,分别找到第一个k和最后一个k,计算两者位置的差值返回。要注意数组中不包含这个数字的情况。
代码:
class Solution {public: int GetFirstk(vector<int> data,int k,int low,int high){ while(low<high){ int mid=low+(high-low)/2; if(data[mid]==k){ if(data[mid-1]!=k){ return mid; } high=mid-1; } else if(data[mid]>k){ high=mid-1; }else{ low=mid+1; } } if(low>=high&&data[low]==k) return low; return -1; } int GetLastk(vector<int> data,int k,int low,int high){ while(low<high){ int mid=low+(high-low)/2; if(data[mid]==k){ if(data[mid+1]!=k){ return mid; } low=mid+1; } else if(data[mid]>k){ high=mid-1; } else{ low=mid+1; } } if(low>=high&&data[low]==k) return low; return -1; } int GetNumberOfK(vector<int> data ,int k) { int n=data.size(); if(n==0||k<data[0]||k>data[n-1]) return 0; int first=GetFirstk(data,k,0,n-1); int last=GetLastk(data,k,0,n-1); if(last!=-1&&first!=-1) return last-first+1; else return 0; }};
0 0
- 【剑指offer】数字在排序数组中出现的次数
- 剑指offer--数字在排序数组中出现的次数
- 《剑指offer》数字在排序数组中出现的次数
- 剑指offer:数字在排序数组中出现的次数
- 剑指offer-数字在排序数组中出现的次数
- 剑指offer:数字在排序数组中出现的次数
- [剑指offer]数字在排序数组中出现的次数
- 剑指offer 数字在排序数组中出现的次数
- [剑指offer]数字在排序数组中出现的次数
- 剑指offer|数字在排序数组中出现的次数
- 剑指offer-数字在排序数组中出现的次数
- 《剑指offer》-数字在排序数组中出现的次数
- 剑指offer - 数字在排序数组中出现的次数
- 剑指offer-数字在排序数组中出现的次数
- 【剑指offer】数字在排序数组中出现的次数
- 剑指offer:数字在排序数组中出现的次数
- 《剑指offer》数字在排序数组中出现的次数
- 剑指offer-数字在排序数组中出现的次数
- mAppWidget - 2. 去除地图开发团队水印
- Linux(centOS6.5)下SVN的安装、配置及开机启动
- Java再学习-JVM类加载和执行机制
- 决策树算法预测森林植被
- SEO
- [剑指offer]数字在排序数组中出现的次数
- 匿名管道
- webStorm 3.0配置使用主题背景色等
- JAX-RS的参考实现:《使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务》
- poj 1269 Intersecting Lines
- 有名管道
- java多线程(对象和变量的并发访问)
- 信号
- sql server中的 SET NOCOUNT ON 的含义