题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
看到大多数都是二分查找上下界,开始我的想法是:二分查找到某一个数等于k,然后从这个数开始分别往左和往右统计有多少个k,总是超时,嗯?好像没什么大问题啊?
于是换了一个思路,分别从头和从尾开始查找等于k的上下界,竟然过了。。。时间复杂度为O(n-m),空间复杂度O(1)。
public:
int GetNumberOfK(vectordata ,int k) {
int l = 0;
int r = data.size()-1;
while(l<=r) { if(data[l]<k>k){
l++;
r--;
}
else if(data[l]<k>k && data[l]>=k)
r--;
else break;
}
if(l>r) return 0;
return r-l+1;
}</k></k> 