剑指offer:统计一个数字在排序数组中出现的次数
分别定义低位0和高位n-1,当低位小于等于高位时,定义个中值mid(用的二分),如果数组的中值比k要大,那么把高位放到mid-1处,同理,小的话,把低位放到mid+1,都不满足说明和k相等,但存在不只一个满足,所以要遍历和k都相等的值,然后用了两个while循环,分别求总数,最后输出!!!
class Solution{ public: int GetNumberOfK(vector<int> data,int k){ int low= 0,high= data.size()-1; if(high==-1) return 0; while(low<=high) { int mid =low+(high -low)/2; if(data[mid] >k) high=mid-1; else if(data[mid]<k) low= mid+1; else{ int count=0;; count++; int index=mid-1; while(index>=0 && data[index]==k){ count++; index--; } index=mid+1; while(index<=data.size()-1 && data[index]==k){ count++; index++; } return count; } } return 0; } };#剑指offer##23届找工作求助阵地#