給定乙個非負整數陣列和乙個整數m,你需要將這個陣列分成m個非空的連續子陣列。設計乙個演算法使得這m個子陣列各自和的最大值最小。
注意:
陣列長度 n 滿足以下條件:
1 ≤ n ≤ 1000
1 ≤ m ≤ min(50, n)
輸入:
nums = [7,2,5,10,8]
m = 2
輸出:18
解釋
一共有四種方法將nums分割為2個子陣列。
其中最好的方式是將其分為[7,2,5] 和 [10,8],
因為此時這兩個子陣列各自的和的最大值為18,在所有情況中最小。
# -*- coding:utf-8 -*-
class
solution
:def
splitarray
(self, nums, m)
:def
check
(mid)
: total=
0 count=
1for num in nums:
if num + total >mid:
total =num
count +=
1else
: total +=num
return count<=m
left =
max(nums)
right =
sum(nums)
while left < right:
mid =
(left+right)//2
if check(mid)
: right = mid
else
: left = mid +
1return leftc=[
7,2,
5,10,
8]m=2
result = solution(
)print
(result.splitarray(c,m)
)
Leetcode 每日一練
最小棧 設計乙個支援 push pop top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 輸入 minstack push push push getmin pop top ge...
Leetcode 每日一練
leetcode 每日一練 擁有最多糖果的孩子 給你乙個陣列 candies 和乙個整數 extracandies 其中 candies i 代表第 i 個孩子擁有的糖果數目。對每乙個孩子,檢查是否存在一種方案,將額外的 extracandies 個糖果分配給孩子們之後,此孩子有 最多 的糖果。注意...
Leetcode 每日一練
猜數字 小a 和 小b 在玩猜數字。小b 每次從 1,2,3 中隨機選擇乙個,小a 每次也從 1,2,3 中選擇乙個猜。他們一共進行三次這個遊戲,請返回 小a 猜對了幾次?輸入的guess陣列為 小a 每次的猜測,answer陣列為 小b 每次的選擇。guess和answer的長度都等於3。示例 1...