檢索算法 ---利用二分查找進行數據重複次數統計

一、思想

  • 當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;
}
發佈了70 篇原創文章 · 獲贊 19 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章