LeetCode每日一練 分割陣列的最大值

2021-10-08 12:24:47 字數 1141 閱讀 8135

給定乙個非負整數陣列和乙個整數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...