分割陣列的最大值

2021-10-08 12:26:51 字數 731 閱讀 7400

題目:力扣

解題思路:動態規劃和二分查詢

具體可看

關於二分法,cnt為什麼初始化為1?

這裡cnt初始化為1, 是因為迴圈中當cnt+1的時候,首先預示著已經填滿了乙個子組,其次還預示著下一組已經有乙個數字加入了(即total=num),所以最後一組在迴圈中一定不會被記入cnt就跳出了for迴圈,所以要先記入一次cnt=1。

class solution 

//f(i,j) = min(max(f(k,j-1),sub[i]-sub[k]))

int dp = new int[len+1][m+1];

for(int i = 0; i <= len; i++)

dp[0][0] = 0;

for(int i = 1; i <= len; i++)}}

return dp[len][m];

}//二分法

public int splitarray(int nums, int m)

}while(left < right)

else

}return left;

}public boolean check(int nums, int val, int m)

else

}return cnt <= m;

}}

410 分割陣列的最大值

給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。令dp i j 表示陣列前i個數分成j段時的最小和,那麼我們可以列舉k,表示前k個數分成了j 1段,那麼後k 1到i個數就被分成了一段,此時狀態轉移方程就是 sub...

410 分割陣列的最大值

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

410 分割陣列的最大值

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