Maximum Subarray

Given an array of integers, find a contiguous subarray which has the largest sum.

求数组中间的一段, 就长减短

PrefixSum[i] = A[0] + A[1] + … A[i – 1], PrefixSum[0] = 0

易知构造 PrefixSum 耗费 O(n) 时间和 O(n) 空间

如需计算子数组从下标i到下标j之间的所有数之和

则有 Sum(i~j) = PrefixSum[j + 1] – PrefixSum[i]

class Solution {
public:
    /*
     * @param nums: A list of integers
     * @return: A integer indicate the sum of max subarray
     */
    int maxSubArray(vector<int> &nums) {
        // write your code here
        int size = nums.size();
        if (size == 0) {
            return 0;
        }
        int minMax = 0;
        int maxSum = INT_MIN;
        int sum = 0;
        for (int i = 0; i < nums.size(); i++) {
            sum+= nums[i];
            maxSum = max(maxSum, sum - minMax);
            minMax = min(minMax, sum);
        }
        return maxSum;
    }
};

results matching ""

    No results matching ""