算法学习笔记(一)求解最大子序列和的问题

  问题:给定一个有n(n >= 1)个整数的序列,求出其中最大连续子序列的和

  在这个问题中,我给出几种做法。

  方法一:暴力

    来两个循环,将所有的可能情况都考虑到,再求出最大值

    

 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 }

 

 

   方法二:动态规划

  老实说,由于没有学什么算法,动态规划是什么我也不懂,但是在大佬的指点下,这题动态规划好写点。

  

 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 }

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/1998xujinren/p/10624732.html