easy 自己做出来的方法是o(n2),tle了. 看了答案, 发现其实也是按照s m[i, j] = s m[0, j] - s m[0, i]这公式,去找s m[0, j] - s m[0, i]的最大值.我的一种错误思路是找s m[0, j]的最大值和s m[0, i]的最小值,然而有可能这样找出来可能j  i不符题意,或者是遍历两边去找最大差导致tle. 答案说明你要找s m[i, j] 的最大值,完全可以动态去直接找,不用想当然地去找被减数的最大值和减数的最小值. 因为pres m完全可以一直记录,再记录一个minpres m就行了,那么pres m - minpres m就等于maxs bs m了. p blic class sol tion { p blic int maxs barray(int[] n ms) { int maxs bs m = integer.min_value; int pres m = 0; int minpres m = 0; s m[i,j] = s m[0,j] - s m[0, i]; for (int i = 0; i  n ms.length; i){ pres m += n ms[i]; maxs bs m = math.max(maxs bs m, pres m - minpres m); minpres m = math.min(minpres m, pres m); } ret rn maxs bs m;