在我們簡單學完了數據結構和算法的基礎概念之後,我們可以開始第一次的實踐練習。
問題描述 |
給定N個整數的序列{},求解函數的最大值。
看完這個問題描述,其實沒有搞明白什麼是子列和?問題沒有讀懂可還行。原來這裏面的子列是連續子列的意思,頭有點大。突然感覺要計算的東西有些多。
算法1 |
int MaxSubseqSum1(int A[],int N)
{/*輸入是整個整數序列,以及整數序列裏面(元素)的個數*/
int ThisSum,MaxSum =0;
int i,j,k;
for(i=0;i<N;i++){/*i是子列左端的位置*/
for(j=i;j<N;j++)/*j是子列右端的位置*/
/*我們在雙重循環裏面暴力求解子列和,我們還要有一層k循環*/
ThisSum = 0;/*ThisSum是A[i]到A[j]的子列和*/
for(k = i;k<=j;k++)
{
ThisSum += A[k];
}
if(ThisSum>MaxSum)
MaxSum=ThisSum;
}/*j循環結束*/
}/*i循環結束*/
return MaxSum;
}
我們的算法複雜度由於有三層for循環嵌套,是,當數據規模變大的時候,這個複雜度也是很大的嘛。雖然很愚蠢的一個方法,但是至少能達到題目要求了。知識點是以前學過的雙重循環和簡單的序列求和常規方法。
尹成老師帶你學算法