Python程式:查詢跳傘者在k天內所需的最小飛機空間
假設我們有一個名為 nums 的數字列表,其中每個值代表一組希望一起跳傘的人。我們還有另一個值 k,表示他們可以申請跳傘的天數。我們必須找到我們需要能夠在 k 天內滿足所有請求的飛機的最小容量。請求應按其給定的順序滿足,並且飛機每天只能飛行一次。
因此,如果輸入類似於 nums = [16, 12, 18, 11, 13],k = 3,則輸出將為 28,因為 28 人座的飛機可以將給定的請求分組為 [16, 12]、[18]、[11, 13]。
為了解決這個問題,我們將遵循以下步驟:
- 如果 nums 為空,則
- 返回 0
- start := nums 的最大值,end := nums 所有元素的總和
- 當 start < end 時,執行以下操作:
- mid := (start + end) / 2
- days := 1,temp := 0
- 對於 nums 中的每個 num,執行以下操作:
- 如果 temp + num > mid,則
- days := days + 1
- temp := num
- 否則,
- temp := temp + num
- 如果 temp + num > mid,則
- 如果 days > k,則
- start := mid + 1
- 否則,
- end := mid
- 返回 start
讓我們看看以下實現以更好地理解:
示例
class Solution: def solve(self, nums, k): if not nums: return 0 start, end = max(nums), sum(nums) while start < end: mid = (start + end) // 2 days = 1 temp = 0 for num in nums: if temp + num > mid: days += 1 temp = num else: temp += num if days > k: start = mid + 1 else: end = mid return start ob = Solution() nums = [16, 12, 18, 11, 13] k = 3 print(ob.solve(nums, k))
輸入
[16, 12, 18, 11, 13], 3
輸出
28
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP