原創博文,轉載請注明出處!
本題牛客網地址
# 題目
輸入一個整形數組,數組里有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值,時間復雜度為O(n)。
# 思路
分析計算連續子數組最大和的規律。下圖是我們計算數組(1,-2,3,10,-4,7,2,-5)中子數組的最大和的過程。設置兩個輔助變量,累加子數組和cur_sum、最大子數組和max_sum。初始的累加子數組和cur_sum為數組的第一個元素,初始的最大子數組和max_sum為數組的第一個元素。更新cur_sum方法:如果cur_sum>0,則繼續累加;否則用下一個元素值替換累加的子數組和。更新max_sum方法:如果cur_sum >max_sum,則用累加的子數組和替換最大的子數組和。
# 代碼
1 class Solution { 2 public: 3 int FindGreatestSumOfSubArray(vector<int> array) 4 { 5 // 魯棒性 6 if(array.empty())return 0; 7 8 // 輔助變量 9 int cur_sum = array[0];// cur_sum為當前和 10 int max_sum = array[0];// max_sum為最大和 11 12 // 遍歷所有元素 13 for(int i = 1; i < array.size(); ++i) 14 { 15 // 更新cur_sum 16 if(cur_sum <= 0){ 17 cur_sum = array[i]; 18 } 19 else{ 20 cur_sum += array[i]; 21 } 22 // 跟新max_sum 23 if(cur_sum > max_sum){ 24 max_sum = cur_sum; 25 } 26 } 27 return max_sum; 28 } 29 };