LeetCode 53 Kadane's algorithm

刷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;
        }
    }

你可能感兴趣的:(LeetCode 53 Kadane's algorithm)