Leetcode 410.分割陣列的最大值
阿新 • • 發佈:2019-01-08
分割陣列的最大值
給定一個非負整數陣列和一個整數 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 {
public int splitArray(int[] nums, int m) {
int size=nums.length;
double[][] arr=new double[m][size];
long sum=0;
for(int i=0;i<size;i++){
sum+=nums[i];
arr[0][i]=sum;
}
for(int i=1;i<m;i++){
for(int j=size-1;j>=i;j--){
sum=0;
arr[i][j]=Integer.MAX_VALUE ;
for(int k=j;k>=i;k--){
sum+=nums[k];
double temp=(sum<arr[i-1][k-1])?arr[i-1][k-1]:sum;
if(arr[i][j]>temp) arr[i][j]=temp;
}
}
}
int result=(int)arr[m-1][size-1];
return result;
}
}