1. 程式人生 > >Leetcode 410.分割數組的最大值

Leetcode 410.分割數組的最大值

tex 個數 arr 所有 img return blue array inf

分割數組的最大值

給定一個非負整數數組和一個整數 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;
}
}

Leetcode 410.分割數組的最大值