题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
几种简单条件判断——数组长度都为0,返回0;数组长度为1,且元素值等于k,返回1;数组长度大于1时,则按照下面原则求解:
找到数组中值等于k的第一个元素和最后一个元素。采用二分法求解速度快,若采用遍历,在数据量庞大时计算量也很大。
class Solution { public: int GetNumberOfK(vector<int> data ,int k) { if(data.empty()) return 0; if(data.size()==1 && data[0]==k) return 1; int first = 0; int last = data.size()-1; if(first==last) return 0; int cnt=0; while(cnt==0 && first<=last) { int mid = (first+last)/2; if(data[mid]<k) { first = mid+1; } else if(data[mid]>k) { last = mid-1; } else { while(data[first]!=k&&data[first+1]!=k) { first = (mid+first)/2; } while(data[last]!=k&&data[last-1]!=k) { last = (mid+last)/2; } cnt = (data[last]==k?last:last-1)-(data[first]==k?first:first+1)+1; } } return cnt; } };