首页 > 编程语言 > 详细

Leetcode 410.分割数组的最大值

时间:2019-01-08 23:27:03      阅读:364      评论:0      收藏:0      [点我收藏+]

分割数组的最大值

给定一个非负整数数组和一个整数 m,你需要将这个数组分成 个非空的连续子数组。设计一个算法使得这 个子数组各自和的最大值最小。

注意:
数组长度 满足以下条件:

  • 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.分割数组的最大值

原文:https://www.cnblogs.com/kexinxin/p/10241843.html

(1)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!