动态规划求解数组连续最大和
来源:互联网 发布:护卫神php套件怎么用 编辑:程序博客网 时间:2024/06/06 01:20
1、动态规划的思想
动态规划即把全局问题的解分解为一个个子问题的解,一个个子问题的解存在递推关系,即上一个问题的解是下一个问题解的基础,这样直到求解出全局问题的解。
2、求一个数组中连续几个数相加的最大值;
给定一个数组,它里面全是一些数字,要找出任何连续的值中最大的和. 例: 已有数组:{31,-41,59,26,-53,58,97,-93,-23,84}
它的连续的值最大的和则是第 2 个值到第 6 个值的合:187.
3、求解过程
sum(i)表示前i个数的和,max(i)表示长度为i的数组的连续最大和:
max(0)=sum(0)=array(0);
sum(i)=sum(i-1)+array(i):if sum(i) < 0 说明对整个连续和没有贡献,则将其修改为0,重新累计和;
max(i)=sum(i)==0?Max(max(i-1),array(i)):Max(sum(i),max(i-1)):sum(i)为0,说明被修正过,因为加完array(i)
为负数故修正,此时,max(i)是在max(i-1)和当前元素array(i)间产生,
否则加完array(i)为正,说明对连续和有贡献,则在max(i-1)和sum(i-1)间产生。
4、java代码
public class ContinueSum {
private static int continueSum(int [] toSearch) {
int maxSofar = Integer.MIN_VALUE;
int n = toSearch.length;
int maxEnding = 0;
for (int i = 0; i < n; i++)
{
maxEnding = Math.max(maxEnding + toSearch[i], 0);
if(maxEnding==0)
maxSofar = Math.max(maxSofar, toSearch[i]);
else
maxSofar = Math.max(maxSofar, maxEnding);
}
System.out.println(maxSofar);
return maxSofar;
}
public static void main(String[] args){
int[] a ={-3,-2,-1,4,2};
continueSum(a);
}
}
private static int continueSum(int [] toSearch) {
int maxSofar = Integer.MIN_VALUE;
int n = toSearch.length;
int maxEnding = 0;
for (int i = 0; i < n; i++)
{
maxEnding = Math.max(maxEnding + toSearch[i], 0);
if(maxEnding==0)
maxSofar = Math.max(maxSofar, toSearch[i]);
else
maxSofar = Math.max(maxSofar, maxEnding);
}
System.out.println(maxSofar);
return maxSofar;
}
public static void main(String[] args){
int[] a ={-3,-2,-1,4,2};
continueSum(a);
}
}
1 0
- 动态规划求解数组连续最大和
- golang动态规划求解最大连续子数组和
- 子数组最大和 动态规划求解
- 动态规划求取连续数组最大和
- 动态规划求取连续数组最大和
- 动态规划求解最大连续子序列和
- 【动态规划】求数组最大的子数组连续和
- 连续子数组的最大和 动态规划实现
- Java 动态规划来求数组连续最大的和
- 动态规划:求子数组的最大连续和
- 动态规划求一个数组的连续最大和
- hdu1231 连续子数组最大和(分治,动态规划)
- 【动态规划】之求连续子数组的最大和
- 动态规划典型例题--连续子数组的最大和
- 最大连续子数组和、乘积(动态规划)
- 动态规划-最大连续乘积子数组
- 利用动态规划求连续数组最大和以及最大子矩阵的和
- 动态规划求解最大子段和
- 关于oracle数据库的重新安装
- linux 小记
- 序列化
- JAVA环境搭建之JDK配置
- ubtuntu安装ssh服务
- 动态规划求解数组连续最大和
- mysql 性能优化
- windows2003VPN设置教程
- sql server 2008基本语句
- js刷新页面方法大全
- 阿里内推面试经验总结
- 【BZOJ】1006 神奇的国度
- 最简单的基于FFmpeg的移动端例子:Android 视频解码器
- IO流读取资源时类加载器的使用