問題:給定一個有n(n >= 1)個整數的序列,求出其中最大連續子序列的和算法
在這個問題中,我給出幾種作法。spa
方法一:暴力code
來兩個循環,將全部的可能狀況都考慮到,再求出最大值blog
1 int maxValue(int data[], int length) 2 { 3 int i,j; 4 int maxData = 0; 5 for(i = 0; i < length; i ++) 6 { 7 int temp = data[i]; 8 9 for(j = i + 1; j < length; j ++) 10 { 11 temp += data[j]; 12 if(maxData < temp) 13 { 14 15 maxData = temp; 16 } 17 } 18 } 19 20 return maxData; 21 }
方法二:動態規劃class
老實說,因爲沒有學什麼算法,動態規劃是什麼我也不懂,可是在大佬的指點下,這題動態規劃好寫點。循環
1 int main() 2 { 3 4 int arr[6] = {-2, 11, -4, 13, -5, -2}; 5 6 int arr2[6] = {0}; 7 int maxtemp = 0; 8 int i; 9 for(i = 0; i < 6; i ++) 10 { 11 maxtemp += arr[i]; 12 if(maxtemp < 0) //若是從左到右加過來和爲負數,則重置爲0,意爲負數捨去,事實上一個樹加上負數,只會越加越小。 13 { 14 maxtemp = 0; 15 }else 16 { 17 arr2[i] = maxtemp;//將動態規劃的一個小步驟結果保存起來,用於之後的求解最大值 18 } 19 } 20 21 int max1 = arr2[0]; 22 23 for(i = 0; i < 6; i ++) //求解最大值,最大值就是連續最大隻序列和 24 { 25 26 if(max1 < arr2[i]){ 27 max1 = arr2[i]; 28 } 29 } 30 31 cout<<max1; 32 return 0; 33 }