問題描述:
給定長度為n的整數序列,a[0...n-1], 求某個子區間[i,j]使得a[i]+…+a[j]和最大.
空間優化后的動態規划:
用兩個變量sum和ans,sum用來保存當前的子段和,ans用來記錄最大的子段和。
循環遍歷,如果當前子段和 > 最大子段和,那么更新最大子段和;如果當前子段和 < 0,那么設置當前子段和 = 0。
1 int MaxSubsequenceSum(int a[],int n) 2 { 3 int sum=0,ans=0; 4 for(int i=0;i<n;i++){ 5 sum+=a[i]; 6 if(sum<0) 7 sum=0; 8 ans=max(sum,ans); 9 } 10 return ans; 11 }
時間復雜度:O(n)
