从前往后加,每加一次就和之前的累加值比较,留取最大值保存着。当累加编程负值时,前面都可以舍去了,因为前面总体可以看作一个赋值,只会拖累后续的累加。而累加负值之前的最大值已经被记录,只需后续比较即可:
public int maxsumofSubarray (int[] arr) {
int result = Integer.MIN_VALUE;
int temp = 0;
for(int i = 0; i < arr.length;i++){
temp+=arr[i];
result=Math.max(result,temp);
temp = temp < 0? 0 : temp;
}
return result;
}