算法學習筆記(一)求解最大子序列和的問題

  問題:給定一個有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 }
相關文章
相關標籤/搜索