public static void main(String[] args) {
int[] arr = {-2,1,-3,4,-1,2,1,-5,4};
int max=arr[0]; //连续n项相加值最大的子数组和
int maxStartIndex = 0;//连续n项相加值最大的子数组起始索引
int maxEndIndex = 0;//连续n项相加值最大的子数组终止索引
int sum=arr[0];//连续n项子数组和
int sumStartindex = 0;//子数组起始索引
int sumEndIndex = 0;//子数组终止索引
for(int i=1;i<arr.length;i++){
int curData = arr[i];
sum = sum + curData;
if(sum <= curData){//当连续n项和还没有当前项大时,重置最大值子数组,连续子数组信息为当前项
max = sum = curData;
maxStartIndex = i; maxEndIndex = i;sumStartindex = i; sumEndIndex = i;
}else{
if(sum > max){//当连续子数组和大于最大值子数组和时,修改最大值子数组信息
max = sum;
maxEndIndex = i; sumEndIndex = i;
}else{//当连续子数组和小于最大值子数组时,记录连续子数组的终止索引信息
sumEndIndex = i;
}
}
}
System.out.println("最大和:"+max+" startIndex:"+maxStartIndex+" endIndex:"+maxEndIndex );
}
打印结果:最大和:6 startIndex:3 endIndex:6
本文详细解析了一种寻找数组中连续子数组最大和的算法实现。通过具体代码示例,展示了如何动态更新最大和及对应的子数组起始和终止索引,最终找到具有最大和的连续子数组。

1172

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



