刷書筆記5 二分模板

2021-09-11 10:20:28 字數 1129 閱讀 1376

利用二分的思想我們可以再log(n)的時間複雜度內在n個數中找出我們想要的數

//二分 ,若存在返回下標,不存在返回-1

intbins

(int key)

return-1

;}

二分法同樣適用於去搜尋答案,由於二分的性質,要求答案必須具備單調性

模板2和3的使用:(引用yxc大佬)

首先通過題目背景和check(mid)函式的邏輯,判斷答案落在左半區間還是右半區間。

左右半區間的劃分方式一共有兩種:

中點mid屬於左半區間,則左半區間是[l, mid],右半區間是[mid+1, r],更新方式是r = mid;或者 l = mid + 1;,此時用第乙個模板;

中點mid屬於右半區間,則左半區間是[l, mid-1],右半區間是[mid, r],更新方式是r = mid - 1;或者 l = mid;,此時用第二個模板;

//每次分為兩個子狀態【l , mid】 【mid+1 , r】,最終一定會以l == r 結束

intbins_1

(int l,

int r)

return l;

}

//每次分為兩個子狀態【l , mid-1】 【mid , r】,最終一定會以l == r 結束

// 注意 mid = (l + r + 1) >>1;

intbins_2

(int l,

int r)

return l;

}

for

(int i =

0; i <

100;

++i)

也可以:

//eps 要比所需精度高兩位

double eps =

1e-5

while

(r-l < eps)

二分的模板(花式二分)

對於不下降序列a,n為序列a元素的個數,key為關鍵字 1.求最小的i,使得a i key,若不存在,則返回 1 int binary search 1 inta,intn int key if a r key returnr return 1 2.求最大的i,使得a i key,若不存在,則返回 ...

二分答案模板

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...

模板 二分答案

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