模板 二分答案

2021-09-10 14:54:49 字數 786 閱讀 1462

二分答案一般使用在求解符合條件的最小值或者最大值上面,當我們遇到這兩個問題的時候,一般都可以使用二分答案來解決問題。

二分答案就是通過對所有可能的答案區間進行折半查詢,不斷縮減範圍,最終確定答案的方法。

//求最小值

intbinary

(int left,

int right)

return left;

}

我們可以知道,要求最小值,那麼所滿足條件的值賦值給右邊界,不滿足的值加一賦值給左邊界,當left == right或者left > right時,則說明已經查詢到符合的最小值。

//求最大值

intbinary

(int left,

int right)

return left;

}

同樣,要求最大值,那麼就需要捨棄符合條件的較小的值,即將左邊界賦值符合條件的點,右邊界賦值不符合條件的值減一。不斷查詢下去,則最後剩下符合條件最大值。其中mid = (right + left + 1) / 2是為了防止無限迴圈,因為當left = right + 1時剛好符合條件,left = (right + left) / 2,就會無限迴圈。

我們既然選擇了使用二分法來求解,那麼我們在check的時候,應該是在我們已知答案的情況下去確認答案,即不是從一般思考方向設想,而是驗證。check函式往往是基於假定知道答案,來驗證是否正確。

二分答案模板

include include 必須包含的標頭檔案 using namespace std int main int tmp upper bound point,point 5,7 point 按從小到大,7最多能插入陣列point的哪個位置 printf d n tmp tmp lower bou...

二分答案模板

include using namespace std int a 返回最後乙個小於k的數的下標 intfind1 int k return l 返回最後乙個小於等於k的數的下標 intfind2 int k return l 返回第乙個大於k的數的下標 intfind3 int k return ...

模板 二分答案

二分答案一般使用在求解符合條件的最小值或者最大值上面,當我們遇到這兩個問題的時候,一般都可以使用二分答案來解決問題。二分答案就是通過對所有可能的答案區間進行折半查詢,不斷縮減範圍,最終確定答案的方法。求最小值 int binary int left,int right return left 我們可...