题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
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>