package com.duoduo.test1;
public class Test4_2_2{
public static void main(String[] args){
//int[] array = {-9,1,3,5,-1,7,-5,3,1};
int [] array= {1,-2,4,8,-4,7,-1,-5};
int len=array.length;
int[] c=new int[len];//引入一个数组
int max = -1000;//用来记录数组c[]中的最大值
int start = 0;//记录数组中子数组的最大和的开始位置
int end = 0;//记录数组中子数组的最大和的结束位置
int tmp = 0;//中间变量
c[0] = array[0];
for (int i = 1; i < len; ++i)
{
if (c[i - 1] > 0)
{
c[i] = c[i - 1] + array[i];
}
else
{
c[i] = array[i];
tmp = i;
}
if (c[i] > max)
{
max = c[i];
start = tmp;
end = i;
}
}
System.out.println(start+"~"+end+"Max is:"+max);
}
}
动态规划---求最大子数组之和
最新推荐文章于 2025-04-06 22:25:45 发布
本文探讨了如何使用动态规划方法来解决寻找数组中最大子数组之和的问题。通过递归公式f(i) = array[i] (i == 0 或 f(i-1) < 0) 和 f(i) = f(i-1) + array[i] (f(i-1) > 0),解释了如何计算以每个数字结尾的最大子数组和。在测试过程中发现,当数组只有一个元素时,原有程序可能出现错误。

最低0.47元/天 解锁文章
4685

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



