二分思想小剖析

2021-10-02 11:44:05 字數 946 閱讀 8967

這乙個月努力沖一沖,三月份的甲級能考掉就考掉了。

今天看演算法筆記看到了二分,想著二分還不簡單。看了看發現並不是?

演算法筆記中有一句加粗的話是我以前在二分中從沒聽過的,大部分二分問題可以歸結為:尋找有序序列中第乙個滿足某條件的元素的位置。這句話一開始聽得不明所以,仔細一想別有洞天。

比如下面的木棒切割問題:

#include

using

namespace std;

int n;

//木棒數量

int stick[

110]

;int m;

//要幾根

int l =1;

int r;

intmain()

} cin >> m;

int mid;

int sum;

while

(l < r)

if(sum < m)

else}

cout << l -

1<< endl;

cout << r -1;

return0;

}

這道題找的就是第乙個不滿足條件的長度,再減去一就是答案。

這裡將第乙個不滿足條件的長度看為目標。

於是乎上題中,if裡的就是不滿足條件的長度這種情況發生,也就是切割出來的木棒比要求的少。

if

(sum < m)

else

那如何理解上面的五行**就能得到目標呢?這裡的l,r都是閉區間。

當滿足條件時,因為要找的是第乙個滿足條件的,所以還要往前繼續找,而且mid也可能就是目標,所以滿足條件時: r = mid;

而如果mid不滿足時,那前面的也不可能滿足了,所以要將前面的都捨棄,考慮後面的,所以 l = mid + 1;

2019 08 08 二分思想

今天做了一道二分題 感覺二分仍需要加強 乙個經典題目 求乙個遞增陣列裡某個數字出現次數 我們第一想法 暴力 的確可以 邊讀入邊判斷是否為我們要的那個數 這種複雜度是o n 有沒有更高效演算法呢?二分!我們可以二分查詢陣列中這個數出現的第乙個位置和最後乙個位置 數量不就得出來了嗎 那麼怎麼二分呢?我們...

二分查詢思想

二分查詢思想應用於對有序的陣列進行查詢操作。時間複雜度 二分查詢也稱為折半查詢,每次都能將查詢區間減半,這種折半特性演算法時間複雜度為o logn mid計算 有兩種計算中值mid的方式 l h可能出現加法溢位,也就是說加法的結果大於整形能夠表示的範圍。但是l和h都為正數,因此h l不會出現加法溢位...

二分查詢的思想

先看看leetcode兩道相關的題目,都是二分思想的應用。leetcode 35 leetcode 34 二分思想用一句話概況就是 一看就懂,一寫就廢 花了很長時間都沒有弄得懂,每個人都是不同的寫法,新手很難從中發現規律。其實二分查詢最重要的一句話就是 查詢範圍 如何確定查詢範圍?只要確定了查詢範圍...