java实现最大字段和的动态规划解法
2017-04-12 16:35
483 查看
1、题目:
对于数组 a ,如何求出他的一个子数组(下标连续),使得这个子数组的所有元素之和最大?2、动态规划解法
若记其中,a为原数组,1<=j <=n.
那么b[ j ]是什么意思呢?
答:b[ j ]表示在数组a中以a[ j ]结尾的所有子数组最大值。
由于任何子数组必然以数组a 中某一个元素结尾,那么我们就可以把所有子数组按照它的最后一个元素下标来进行分类,按照前面的定义,每一个类别中的子数组最大值就是b[ j ]啊。所以我们要求的最终结果就是b [ j ]的最大值了。
然后是递推关系。显然,b[ j ]=max {b[ j-1 ]+a[ j ], a[ j ]}, 1<=j<=n.
最后,show you my code :
public class MaxSum { public static void main(String[] args) { // TODO Auto-generated method stub int[] array={1,-1,5,5,-6,-2,-7}; System.out.println(maxChildArraySum(array)); } /**求给定数组的最大字段和 * 暂不考虑全部负数的情况 * @param array * @return */ static int maxChildArraySum(int[] array){ int sum=0; int b=0; for(int i=0;i<array.length;i++){ if(b>0) b+=array[i]; else b=array[i]; if(b>sum) sum=b; } return sum; } }
附加:
为了节省空间,我在算法中只用了一个变量 b ,而不是使用数组 b [ j ],因为b[ j-1 ]仅仅是在求b[ j ] 的时候被使用了,暂时没有其他用处,于是可以想办法去掉。相关文章推荐
- 动态规划:java实现最大字段和问题
- 动态规划---实现输出最大公共子序列的长度以及输出最大子字符串(java语言描述)
- 算法学习之路:动态规划-最大公共子序列-java实现
- java动态规划 实现输出最大公共子序列的长度以及输出最大子字符串
- 字符串计数-复杂的动态规划题 解析以及Java代码实现
- java实现矩阵连乘的动态规划
- 动态规划之背包问题01——Java实现
- 背包算法递归实现,递归转动态规划的一般方法java实现
- 最大子段和的动态规划解法
- 数组问题之一维最大字段和问题<Java实现>
- Combination Sum IV中两种JAVA动态规划解法的不同
- 求最大连续子序列的和,两种解法:动态规划 & Kadane算法
- 求连续子数组的最大和O(n)解法之思路与Java实现
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- 一维和二维最大字段和的动态规划
- 动态规划之背包问题01--java实现
- TSP问题的动态规划解法(c#实现)
- 阿里云笔试题:最大子段和问题的动态规划解法
- Java语言之动态规划实现01背包
- leetcode 140:Word Break II 采用很巧妙的动态规划和DFS联合使用 JAVA源代码实现