二分講解(一)

2021-10-05 17:36:56 字數 925 閱讀 2395

stl:

在有序陣列int型中(下標1~n)查詢.第乙個大於等於x得下標:

int i=

lower_bound

(a+1

,a+1

+n,x)

-a;//upper_bound用法一樣,不過是找第乙個大於x的元素

在vertor有序陣列中查詢.第乙個大於等於x得下標:

int y=*--

upper_bound

(a.begin()

,a.end()

,x);

**實現:

找出大於等於x的第乙個數

//二分,分為兩邊 

while

(lreturn a[l]

;/*在乙個單調遞增序列中找*/

說明:找到第乙個大於等於x的數,

如果a[mid]>=x一定在左邊,即在l~mid之間。

因為等於它的數在小它的這部分,相反則一定在mid+1~r之間

找出小於等於x的最大值

//二分,分為兩邊 

while

(lreturn a[l]

;

說明:找到小於等於x的最大值,若a[mid]<=x,根據單調性,mid得數會更小,所以最大值一定在mid之後,mid自身也可能是答案,因為mid的之後可能全是大於它的數,所以l=mid;同理若a[mid]>x,mid也可能是答案,所以r=mid-1。

※※(l+r+1)>>1,如果不這麼寫的話,會死迴圈,因為當r-l=1時,可行區間不變,死迴圈!而第一塊不會,因為它的l,不會取mid。

注意:mid是不是答案需要仔細判別!

關於實數的二分以及三分,後面會更新。

模板 講解 二分答案

mashiro ylb聚聚的 模板 講解 二分答案 二分答案與二分查詢類似,即對有著單調性的答案進行二分,大多數情況下用於求解滿足某種條件下的最大 小 值。答案單調性 移動石頭的個數越多,答案越大 noip2015跳石頭 前i天的條件一定比前 i 1 天條件更容易 noip2012借教室 滿足更少分...

二分查詢演算法的詳細講解

二分演算法是乙個較高效率的查詢演算法,但是二分法中的細節卻經常使人感到懵圈。有一次看到一位大神整理的二分演算法細節分析,個人覺得挺好的,借鑑大神的講解,我也大致整理了一些內容。二分演算法常用情景大致分為三種 尋找乙個數 尋找左側邊界 尋找右側邊界。int binarysearch int nums,...

二分查詢(一)

在演算法題目中,很重要的乙個就是邊界條件的設定,需要我們去明確,變數代表的含義,在迴圈的過程中一直保證此變數的含義不發生變化。含義不發生變化,而非變數值。class binaryclass system.out.println binarysearch2 arr,arr.length,4 publi...