資料結構與演算法筆記 二分查詢 力扣1011

2021-10-14 07:44:02 字數 691 閱讀 8892

傳送帶上的包裹必須在 d 天內從乙個港口運送到另乙個港口。

傳送帶上的第 i 個包裹的重量為 weights[i]。每一天,我們都會按給出重量的順序往傳送帶上裝載包裹。我們裝載的重量不會超過船的最大運載重量。

返回能在 d 天內將傳送帶上的所有包裹送達的船的最低運載能力。

以船容量為標定進行二分查詢,最小船容量(左邊界)為陣列中的最大值,對應每天運輸一條船;最大船容量(右邊界)為陣列和,對應一次都運輸走的情況,用二分查詢的模板(找乙個模糊值的模板),注意搜尋區域的縮減:如果當前船容量滿足條件,縮減右邊界,right=mid;如果當前船容量不滿足條件,縮減左邊界,left=mid+1

class

solution

int left=max;

int right=sum;

while

(leftelse

}return right;

}private

boolean

isok

(int

weights,

int capacity,

int d)

//判斷最大容量為capacity時能否在d天內裝完

curship+=w;

}return d>0;

}}

時間複雜度:o(nlogn)

空間複雜度:o(1)

力扣 二分查詢

1.確定二分的邊界 2.編寫二分的 框架 3.設計乙個check 性質 4.判斷一下區間如何更新 5.如果更新方式時l mid,r mid 1,那麼在算mid的時候加1 includeusing namespace std int mysqrt int x return l int main ret...

資料結構與演算法 二分查詢

二分查詢的思想是在已經排序 公升序 的陣列中,如果要查詢的數比中位數小,那麼其位置只可能在左半部分,相反只能在右半部分。這樣每次把查詢區間縮小一半,比順序查詢效率快得多。非遞迴寫法 public static int binarysearchinasclooply int nums,int star...

資料結構與演算法,二分查詢

1.時間複雜度 每次能去掉一半即 logn 2.實現方式 while迴圈 與 遞迴 我更推薦 while 迴圈,因為遞迴有個潛在的問題就是 stack over flow 堆疊溢位 而且在實際工程中是盡量避免遞迴的。雖然遞迴寫起來方便,也不容易出錯。3.實現關鍵點 我總結了下,一共有以下四點 sta...