题目
给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
代码
import java.util.Scanner;
public class Topic{
public static void main(String[] args){
Topic topic = new Topic();
topic.Calculation();
}
public void Calculation() {
int sum = 0;//用于计算连续数的和
int max = 0;//用于存储最大值
System.out.println("请输入需要计算的数组");
while (true) {//此while循环用于判断输入的值是否为整数,初始状态为true(是)
Scanner scanner = null;
try {//如输入的值不为int类型,将进行catch处理
scanner = new Scanner(System.in);//从键盘输入
String input = scanner.next();//将键盘输入的数转换为String类型(字符串)
String[] stringArr = input.split(",");//创建一个String类型的数组,分割该字符串
int[] arrs = new int[stringArr.length];//创建一个int类型的数组,长度为输入的字符的个数
for (int i = 0; i < stringArr.length; i++) {//将String类型转换为int类型,并存入int类型的数组中
arrs[i] = Integer.parseInt(stringArr[i]);
}
for (int j : arrs) {//遍历int类型数组
sum += j;//将每次遍历出的值进行相加
if (sum > 0) {//判断和是否为正数
max = max < sum ? sum : max;//如果为正数,和上一次值对比,将最大的赋值给max
} else {
sum = 0;
}
}
System.out.println("和最大的连续数的和为:" + max);
} catch (Exception e) {
System.err.print("格式错误请重新输入值为整数的数组!\n");
continue;//输入的部位整数,重新输入
}
break;//输入完毕跳出循环
}
}
}
运行结果
PS:
答案不一定是最好的,希望能有所帮助,第一次写博客,有问题的地方请大佬多多指出,祝愿各位小猿们,薪资多多,BUG少,头发多多,加班少