二分查找!!再學不會就是瓜皮

首先想清楚!!二分查找分為四種(數組中包含重復元素)分別為

YES_LEFT   ----> 能找到且返回最左邊的數的位置
YES_RIGHT ----> 能找到且返回最右邊的數的位置
NO_LEFT     ----> 不能找到且返回左邊與其接近的數的位置
NO_RIGHT  ----> 不能找到且返回右邊與其接近的數的位置

例如下列數組:

2 3 4 4 4 6 6 6 6 7

YES_LEFT(4) -> 2 
YES_RIGHT(4) -> 4 
NO_LEFT(6) -> 4 
NO_RIGHT(6) -> 9

對于YES_LEFT或者NO_RIGHT

int bSearch(int begin, int end, int e)  
{  
    int mid;
    int  left = begin;
    int  right = end;  

    while(left <= right)  
    {   
        mid = (left + right) >> 1;  
        if(num[mid] >= e){
            right = mid - 1;  
        }else {
            left = mid + 1;
        }  
    }  
    return left;  
}  

對于YES_RIGHT或者NO_LEFT

 int bSearch(int begin, int end, int e)  
    {  
        int mid;
        int  left = begin;
        int  right = end;  

        while(left <= right)  
        {   
            mid = (left + right) >> 1;  
            if(num[mid] > e){
                right = mid - 1;  
            }else {
                left = mid + 1;
            }  
        }  
        return right;  
}  
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 最近在看數據結構,研究了一下常用的幾種排序方法:1.冒泡排序,2.選擇排序,3.插入排序,4.希爾排序,5.快速排...
    wo883721閱讀 1,505評論 0 4
  • 1 前言 二分查找本身是個簡單的算法,但是正是因為其簡單,更容易寫錯。甚至于在二分查找算法剛出現的時候,也是存在b...
    __七把刀__閱讀 1,411評論 0 1
  • 為避免出現緊張,脫離自己的掌控,一般的情形都是通過訓練解決。 埋頭苦干并不會獲得一切。 為什么現在沒有很緊張呢?是...
    Helexy22閱讀 277評論 0 0