Maximum Subarray

来源:互联网 发布:全景大师软件 编辑:程序博客网 时间:2024/05/02 16:35
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [−2,1,−3,4,−1,2,1,−5,4],

the contiguous subarray [4,−1,2,1] has the largest sum = 6.


参照了Programming Pearls上的解法。for循环内更新两个变量maxEndingHere和maxSoFar,第一个用来记录以第i + 1个元素结尾的子数组的和的最大值,第二个变量用来记录从第一个元素到第i + 1个元素范围内的子数组的和的最大值(可以不以第i + 1个元素结尾)。

class Solution {public:    int maxSubArray(int A[], int n) {        int maxEndingHere = 0, maxSoFar;        bool firstComp = true;        for (int i = 0; i < n; i++)        {            maxEndingHere = max(maxEndingHere + A[i], A[i]);            if (firstComp)            {                maxSoFar = maxEndingHere;                firstComp = false;            }            else            {                maxSoFar = max(maxSoFar, maxEndingHere);            }        }        return maxSoFar;    }};


0 0
原创粉丝点击