题目描述
统计一个数字在排序数组中出现的次数。
【思路】因为是排序数组,所以可以用二分法搜索到要查找的值在数组中的一个位置,接着向两侧扫描,遇到不等的就停止。
1 class Solution { 2 public: 3 int getIndexbyDivision(vector<int> data,int k){ 4 int left = 0,right = data.size() - 1; 5 int middle = left + (right - left)/2; 6 while(left <= right){ 7 if(k > data[middle]) 8 left = middle + 1; 9 else if(k < data[middle]) 10 right = middle - 1; 11 else 12 return middle; 13 middle = left + (right - left)/2; 14 } 15 return -1; 16 } 17 int GetNumberOfK(vector<int> data ,int k) { 18 int index = getIndexbyDivision(data,k); 19 if(index == -1) return 0; 20 int num = 1; 21 for(int i = index - 1;i >= 0 && data[i] == k;i --) num++; 22 for(int j = index + 1;j < data.size() && data[j] == k;j ++) num++; 23 return num; 24 } 25 };