1. 程式人生 > >leetcode 刷題之路 83 Maximum Subarray

leetcode 刷題之路 83 Maximum Subarray

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.

輸入一個整形陣列,數組裡有正數也有負數,求所有子陣列的和的最大值。

思路:從左向右遍歷陣列元素相加求和得到和sum,若sum小於0,必然會對總的和有損耗,因此將sum重置為0,從當前位置繼續重複上述過程,直到陣列結束,與此同時設定max變數記錄求和過程中遇到的最大值。

執行完上述過程,判斷max等於0(max初值為0),若大於0,max為所求結果,返回max。

若仍然等於0說明求和過程中未出現過正數,陣列中全是負數或0,此時陣列最大和就是陣列中最大的最大的元素,返回陣列中最大的元素即可。

程式碼如下:

class Solution {
public:
    int maxSubArray(int A[], int n) 
    {
        int sum=0,max=0;
        for(int i=0;i<n;i++)
        {
            sum+=A[i];
            if(sum<0)
                sum=0;
            if(sum>max)
                max=sum;
        }
        if(max==0)  //說明陣列中無正數,遍歷取0或者數
        {
            max=A[0];
            for(int i=1;i<n;i++)
                if(max<A[i])
                    max=A[i];
        }
        return max;
    }
};