一、思想
- 當binSearch()函數找到某個值時,如果數據集中還有其他相同的值出現,那麼該函數會定位再類似值的附近。
- 換句話說,其他相同的值可能會出現在已找到值的左邊或右邊。
- 最簡單的解決方案:寫兩個循環,兩個都同時對數據集進行向左和向右遍歷,統計重複次數。
二、代碼實現
function binSearch(arr, data) {
var low = 0;
var high = arr.length-1;
while(high >= low) {
var mid = Math.floor((high + low)/ 2);
if(arr[mid] < data) {
low = mid+1;
} else if(arr[mid] > data) {
high = mid-1;
}else{
return mid;
}
}
return -1;
}
function count(arr,data){
var position = binSearch(arr,data);
var count = 0;
if(position != -1){
count++;
for(var i = position+1 ;i < arr.length;i++){
if(arr[i] == data) count++;
else break;
}
for(var i = position-1 ;i >=0;i--){
if(arr[i] == data) count++;
else break;
}
}
return count;
}