两种思路:
第一种:遍历数组,将数组中的数字从1个到数组长度个数字相加进行比较。
import java.util.*;
public class Solution{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
int maxSum = arr[0]; //存放和最大
for (int i = 0; i < arr.length; i++) {
int sum = arr[i];
//判断单个数字是否比最大值大
if (sum > maxSum) {
maxSum = sum;
}
for (int j = i+1; j < arr.length; j++) {
sum += arr[j];
//加一次比较一次
if (sum > maxSum) {
maxSum = sum;
}
}
}
System.out.println(maxSum);
}
}
}
第二种:遍历数组,只要连续的和不小于0,对后面的数字的相加来说都会倒置后面的和增加,但是如果连续的和sum小于0,对后面的和来说就会倒置后面的数字变小,所以只要sum小于0了,就直接将前面的连续和舍弃掉,将当前i下标的值作为sum重新进行相加。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
int sum = nums[0];
int max = nums[0];
for (int i = 1; i < n; i++) {
if (sum >= 0) {
sum += nums[i];
} else {
sum = nums[i];
}
if (sum > max) {
max = sum;
}
}
System.out.println(max);
}
}
}