二分查詢 一網打盡所有細節!

2021-10-22 04:03:32 字數 1683 閱讀 2183

二分查詢,典中典的演算法,為了便於說明,先給出測試樣例:

public

static

void

main

(string[

] args)

;int index =

search

(a,4);

system.out.

println

(index)

;}

對於元素 4,我們約定如下概念:左下界為1,下界為2,上界為5,右上界為6。

查詢下界的**如下,這裡採用了左閉右閉的寫法:

public

static

intsearch

(int

arr,

int n)

return l;

}

需要注意的點:由於按左閉右閉初始化 l、r,因此迴圈控制條件應是<=,即,退出迴圈時,r 緊挨著 l 位於其左邊(一定要仔細體會這句話,這是這種寫法的關鍵),故函式返回值需要按要求決定是 l 或 r。

此外,我們約定,當前元素為 arr[mid]目標元素為 形參 n

對於二分查詢,目前還未討論的就剩下邊界(l 和 r)的移動方式,以及當前元素等於目標元素時的處理方式了。

仔細觀察 4 中的圖,對於查詢下界這種情況而言,左邊界 l最終指向的可能還是目標元素,但右邊界 r,它可是要向左跳過所有目標元素的邊界啊!因此,若當前元素等於目標元素,我們無法動左邊界 l只能(也是必須)將右邊界 r 向左移動1格(即 r=mid-1)。此外,若想查詢左下界,只需返回值由 l 改為 r 即可。

同理,對於查詢上界這種情況而言,右邊界 r 最終指向的可能還是目標元素,但左邊界 l,要向右跳過所有目標元素。故,此時若當前元素等於目標元素,我們無法動右邊界 r,只能(也是必須)將左邊界 l 向右移動1格(即 l=mid+1)。此時,僅需將 if 判斷條件裡的 < 改為 <=,函式返回值改為 r 即可。對於查詢右上界,易知返回 l。

若目標元素不存在(這也是為什麼在上文中要說可能),那麼無論 if 判斷條件裡是 < 還是 <=,都不影響結果,此時,示意圖中的兩條虛線會重合,影響結果的只是函式返回值。

面試問題 一網打盡

恭喜,你已經擊敗對手,和雇主約定面試,也就是說你已經成為候選人。準備是面試成功的關鍵,所以我們為你一網打盡面試常見問題作為 演習 準備,開始 1 自我介紹 掌握你的發言時間。1 2分鐘較為適宜。以個人簡歷為引子,擴充套件豐富公司對你的了解,但不可離題萬里,切中要害是大原則。2 你最喜歡的大學課程是什...

PHP 亂碼問題一網打盡

關於php亂碼方面的諸多疑難雜症,在此提出以下解決方案助你解決亂碼問題 1.mysql query set names utf8 這是指定資料庫字符集,放在連線資料庫後 2.header content type text html charset utf 8 放在php檔案最頂部,其前邊不得有任何...

jsDom jsBoM基礎概念一網打盡

1.dom?概念 document object model 文件 html的頁面 文件物件 文件中的元素 文件物件模型 就是一棵樹,為了通過js程式來操作頁面的元素。2.元素節點,屬性節點,文字節點 元素節點 ul li 屬性節點 width 文字節點 我是文字內容 nodetype nodena...