题目如下
思路与代码
1.最简单的,map存值,for循环,map值++,然后直接查map就得到了结果,或者循环等于输入的k就res++
但是这种方法太low了
2.本题正解,题目说是升序数组,那二分应该就是本题的最佳回答了
注意找到后,还要前后找
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int res=0;
int left=0,right=data.size()-1;
while(left<=right){
int mid=(left+right)/2;
if(data[mid]==k){
res++;
for(int i=mid-1;i>=0;i--){
if(data[i]==k) res++;
else break;
}
for(int i=mid+1;i<data.size();i++){
if(data[i]==k) res++;
else break;
}
break;
}else if(data[mid]>k) right=mid-1;
else left=mid+1;
}
return res;
}
};