二分法,應該是所有算法裏面最簡單的,就是在一個有序數組中找一個數,非常簡單。
但是最近捕捉到了一點細節,還是想用系統化的模型來總結總結。
二分法的基本用法:
(1)在一個無重有序數組中找一個確定的數,返回找到的下標
(2)在一個可重複的有序數組中找一個確定的數,返回這個數出現的第一個下標
(3)在一個可重複的有序數組中找一個確定的數,返回這個數出現的最後一個下標
(4)結合(2)(3)可得,在一個可重複的有序數組中找一個確定的數,返回這個數出現的所有下標
然而,很多題目的二分法是這麼用的:
力扣周賽 5438. 製作 m 束花所需的最少天數 https://blog.csdn.net/nameofcsdn/article/details/106744529
我總結了一下,基本二分法是在一個顯式數組中找到一個確定的數,
而很多時候,我們是要求滿足某種條件的最大的數,所以我們搜索的對象是隱式的解空間數組,搜索的目標就是我們的答案。
理解了這個差異,二分法的題目應該都能想到二分了。
搜索解空間數組的時間複雜度是O(T* logJ),其中T是單點驗證時間,J是解空間的大小。
一般如果我們能在10^6次計算內完成單點驗證,就不會超時。