题解 | #连续子数组最大和#
连续子数组最大和
http://www.nowcoder.com/practice/1718131e719746e9a56fb29c40cc8f95
注意题眼,连续,然后是求子数组最大和,通过滑动窗口的方式可以对比找到连续子数组最大和。
public class SumTest {
public static void main(String[] args) {
// AB36-连续子数组最大和 (解法1)
Scanner scanner = new Scanner(System.in);
// 输入数组长度
long aLong = Long.parseLong(scanner.nextLine());
// 输入数组
String[] arrStr = scanner.nextLine().split(" ");
long[] arr = new long[arrStr.length];
// 将输入的数遍历存放到long数组中
for (int i = 0; i < arrStr.length; i++) {
arr[i] = Long.parseLong(arrStr[i]);
}
long subSum = maxArray1(arr.length, arr);
System.out.println("连续子数组最大和为:" + subSum);
}
private static long maxArray1(int length, long[] arr) {
if (arr == null || arr.length < 1) {
return -1;
}
// 前一个元素下标对应的最大子数组之和
long pre = arr[0];
// 总的最大子数组之和
long sum = arr[0];
for (int i = 1; i < length; i++) {
// pre = 当前元素 和 当前元素+ 前一位元素下标对应最大子数组和中的 最大值
pre = Math.max(arr[i], arr[i] + pre);
// 更新最大子数组之和
sum = Math.max(pre, sum);
}
return sum;
}
}