题目
解释
题目说的就是给你一串K个数字,让你找到连续的和最大的子串,同时输出子串的和、子串起始的元素、子串末尾的元素,如果K个数字全是负数,输出子串和为0、子串起始元素为整个字符串的第一个元素,子串末尾元素为整个字符串的最后一个元素。
解题思路
我们依此对字符串累加
sum+=arr[i];
如果sum值<0的话,那就肯定我们要的结果,那就重置sum值为0,并且我们会设置一个temp值为下一段字串的起始点,如果发现下一个字串就是最大和字串,那么我们使left=temp就可以了
如果sum>=0的同时sum超过了我们预设的max值,那么max=sum,right=i,left=temp
if (sum<0){
sum=0;
temp=i+1;
} else if (sum>max) {
max=sum;
left=temp;
right=i;
}
代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
String[] brr=br.readLine().split(" ");
int[] arr=new int[n];
int right=n-1;
int left=0;
int sum=0;
int temp=0;
int max=Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
arr[i]=Integer.parseInt(brr[i]);
sum+=arr[i];
if (sum<0){
sum=0;
temp=i+1;
} else if (sum>max) {
max=sum;
left=temp;
right=i;
}
}
br.close();
if (max<0){
max=0;
}
System.out.println(max+" "+arr[left]+" "+arr[right]);
}
}