刷LeetCode 53题的时候,想不出来O(n)复杂度的解,上网去搜,发现了这个算法,专门来求最大子序列的和,算法就是考虑,数组中的A[I]前面的的序列段的和为sum,如果sum大于等于零,那么加上A[i],如果sum小于零,就没有必要加了,不如直接保留A[i],这样就相当于从A[i]开始的一个新的数字段。保留一个max保存最大的值,每次都和max比较。
class Solution {
public int maxSubArray(int[] nums) {
int max = Integer.MIN_VALUE, sum = 0;
for (int i = 0;i < nums.length; i++) {
if (sum <= 0) sum = nums[i];
else sum = sum + nums[i];
if (max < sum) max = sum;
}
return max;
}
}
网友评论