关于动态规划的相关理解我在上一篇博客动态规划基础01---最长递增子序列中写过,这一篇我们主要练习类似的dp算法题。
题1.对于包含任意正负数的整型数组,求它的最大连续子序列和。比如说,数组array={1,2,3,-7,4,5,6},则它的最大连续子序列为4,5,6,和为15.
首先还是先分析题目的状态转移方程,设maxCur[i]为前i个数字的最大连续子序列和,则
当 maxCur[i-1]<=0时,maxCur[i]=array[i];
当maxCur[i-1]>0时,maxCur[i]=maxCur[i-1]+array[i].
本题没有需要特别注意的边界条件,根据上述方程,相应java代码如下:
public class DP2 {
/**
* @param wj
*/
//最大连续子序列和
public static int func(int[] array){
int length=array.length;
if(length==1) return array[0];
int[] maxCur=new int[length];//保存当前最大子序列和
maxCur[0]=array[0];//第一个元素初始化
int maxSum=array[0];//最大值的初始化
for(int i=1;i<length;i++){
if(maxCur[i-1]<=0){
maxCur[i]=array[i];
}else{
maxCur[i]=maxCur[i-1]+array[i];
}
maxSum=Math.max(maxSum, maxCur[i]);//注意这里,将每一次循环的当前最大值赋给maxSum
}
return maxSum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] array={1,2,3,-7,4,5,6};
System.out.println(func(array));
}
}
代码运行结果为:15,最大连续子序列为4,5,6。

本文探讨如何使用动态规划解决寻找数组中最大连续子序列和的问题。通过分析状态转移方程,得出当前元素的子序列和取决于前一元素的子序列和与当前元素的关系。在给定的数组示例中,最大连续子序列为4,5,6,和为15。并提供了相应的Java实现代码。"
111609326,10327924,R语言绘制条形图:解决不显示图例问题,"['R语言', '数据可视化', '图表制作', 'ggplot2', '统计图形']

被折叠的 条评论
为什么被折叠?



