leetcode 刷題之路 83 Maximum Subarray
阿新 • • 發佈:2019-02-07
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; } };