题目(来源)
给一个数组,返回它的最大连续子序列的和及其开始下标和结束下标。例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8,从第0个开始,到第3个为止。
动态规划
public void FindGreatestSumOfSubArray(int[] array) {
int preValue=0;
int max=Integer.MIN_VALUE;
int i=0,j=0,start=0,end=0;
for(;j<array.length;j++){
if(preValue<0){
i=j;
preValue=array[j];
}else{
preValue+=array[j];
}
if(preValue>max){
start=i;
end=j;
max=preValue;
}
}
System.out.println(start+" "+end+" "+max);
}
基本思想
preValue保存前一次获取的最大值i和j指示当前计算区间start和end记录取得最大值的区间始末
只要preValue<0,无论j指向的下一个元素大于还是小于0,都比preValue+array[j]要大,所以应该抛弃j之前的元素

博客围绕数组最大连续子序列和问题展开,给出具体示例。采用动态规划方法求解,其基本思想是保存前一次最大值、指示当前计算区间、记录取得最大值的区间始末,当preValue<0时抛弃之前元素。
765

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



