《牛客網劍指offer37題》統計一個數字在排序陣列中出現的次數
題目:統計一個數字在排序陣列中出現的次數
結果:牛客網程式設計通過
思路及程式:
//中心思想,用二分法找到第一個等於K的陣列元素,然後向兩邊移動,直到找到不等於k的元素
int GetNumberOfK(vector<int> data ,int k) {
int len = data.size();
if(len == 0) return 0; //陣列長度是0,返回0
if(len == 1) return (data[0]==k)?1:0; //陣列長度是1,如果這個元素等於k返回1,否則返回0
int i=0,j=len-1; //二分法是從0到len-1
int result = 0;
while(i<j){
int n = (i+j)/2;
if(data[n] == k){
int temp = n;
while(temp>=0){ //找到了先向左移動找等於k的元素個數
if(data[temp] == k)
result++;
else
break;
--temp;
}
temp = n;
while(temp<len){ //再向右移動等於k的元素個數
if(data[temp] == k)
result++;
else
break;
++temp;
}
return --result; //第一次找到的重複了,要減去1
}
else if(data[n] > k){
j = n-1; //如果k是比中間元素小,將後面的指標j指向中間前一個
}
else{
i = n+1; //如果k比中間元素大,將後面指標指向中間元素後一個
}
}
return result;
}