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