最大子段和
给定由n个整数(可能有负整数)组成的序列(a1,a2,…,an),最大子段和问题要求该序列形如[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3QvnwfjV-1639493275486)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20211213153243081.png)]的最大值(1<=i<=j<=n),当序列中所有整数均为负整数时,其最大子段和为0。
@SuppressWarnings("ALL")
public class Maximum_sub_segment_sum {//最大子段和,动态规划
public static void main(String args[]){
int []arr = {4,-3,5,-2,-1,2,6,-2};
System.out.println("该字段的最大字段和为" + MaxSubsequce(arr,8));
}
static int MaxSubsequce(int[]arr,int n){
int temp = 0;
int Max = 0;
for(int i = 0;i < n;i++){//设起始边界值为i,尾边界值为i的情况
temp = (temp + arr[i]) > arr[i]?temp +arr[i]:arr[i];//为了保证最大不为零
if(temp > Max){
Max = temp;
}
}
if(Max < 0){//考虑当数值全为负值的情况
return 0;
}
return Max;
}
}