LeetCode410 分割陣列的最大值

2021-10-04 04:26:43 字數 1010 閱讀 8932

leetcode410. 分割陣列的最大值

給定乙個非負整數陣列和乙個整數 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,在所有情況中最小。

解析:
class solution 

int dp = new int[nums.length][nums.length];

for(int i=0;i解法二: 二分法

分析:首先,對於這個問題,陣列nums如果按照乙個數分一組,那麼最大和即為max(nums),如果所有數在同一組,那麼最大和為sum(nums),而這兩個值也就是所有可能解的上下界;

接著,選取一種中間值,按照這個中間值分組,使得每組和小於mid,且放入的元素最多,記錄總分組數;

最後如果分組數大於給定的分組數,那麼說明每組裝少了,需要增大下界;如果分組數小於等於給定的分組數,那麼說明每組還能裝更多的數,也就是減小上界。

具體邏輯見**注釋:

public

intsplitarray

(int

nums,

int m)

}long res = max;

//開始搜尋

while

(minelse

}//如果分組多了,那說明我們每組和小了,提高我們分組和範圍的下界,

//則可以讓更多的數進入同一組

if(group>m)

else

}return

(int

)res;

}

貪心 LeetCode410 分割陣列的最大值

給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這m 個子陣列各自和的最大值最小。注意 陣列長度 n 滿足以下條件 1 n 1000 1 m min 50,n 輸入 nums 7,2,5,10,8 m 2 輸出 18 解釋 一共有四種方法將nums...

LeetCode 410 分割陣列的最大值

給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。注意 陣列長度 n 滿足以下條件 1 n 1000 1 m min 50,n 示例 輸入 nums 7,2,5,10,8 m 2 輸出 18 解釋 一共有四種方法將...

leetcode 410 分割陣列的最大值

410.分割陣列的最大值 給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。注意 陣列長度 n 滿足以下條件 1 n 1000 1 m min 50,n 示例 輸入 nums 7,2,5,10,8 m 2 輸出 1...