题目:得到一个数组的最大子序列和
* 输入:-23 17 -7 11 -2 1 -34
* 输出:21
子序列:连续的子序列,不能中间断开
解法:
用一次遍历,两个变量,算法复杂度为O(n)
1.遍历时,连续相加,如果相加结果大于0,则可以继续遍历相加,相加结果用变量cur保存
2.用变量max表示最大序列和,每次与cur比较,谁大赋值为max
3.如果cur小于0了,则不能继续用cur,因为这样会越加越小,则cur=0,再继续累加
import java.util.Scanner;
public class FIndMaxSubArraySum {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = null;
while(scanner.hasNext()){
str = scanner.nextLine();
String[] str1 = str.split(" ");
int length = str1.length;
int[] arr = new int[length];
for(int i =0; i<length; i++){
arr[i] = Integer.valueOf(str1[i]);
}
int max = maxSum(arr);
System.out.println(max);
}
}
public static int maxSum(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
int max = Integer.MIN_VALUE;
int cur = 0;
for (int i = 0; i != arr.length; i++) {
cur += arr[i];
max = Math.max(max, cur);
cur = cur < 0 ? 0 : cur;
}
return max;
}
}