在我们简单学完了数据结构和算法的基础概念之后,我们可以开始第一次的实践练习。
问题描述 |
给定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循环嵌套,是,当数据规模变大的时候,这个复杂度也是很大的嘛。虽然很愚蠢的一个方法,但是至少能达到题目要求了。知识点是以前学过的双重循环和简单的序列求和常规方法。
尹成老师带你学算法