题解 | #连续子数组最大和#
连续子数组最大和
https://www.nowcoder.com/practice/1718131e719746e9a56fb29c40cc8f95
import java.util.Scanner; import java.util.Arrays; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; boolean flag = false; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); if (arr[i] >= 0) { flag = true; } } if (!flag) { //全是负数 Arrays.sort(arr); System.out.println(arr[n - 1]); return; } int max = 0; int sum = 0; //-2 -8 -1 -5 -9 全是负数的情况 for (int i = 0; i < n; i++) { int num = arr[i]; sum = sum + num; if (sum < 0) { sum = 0; } else { max = Math.max(sum, max); } } System.out.println(max); } }
只要sum >= 0 就把sum加下一个值
只要 sum < 0 ,对后面的值会是负影响,直接不要了,重新加!
记录sum的最大值
会有全是负数的情况,这里直接粗暴处理了,返回负数的最大值就好