求最大子序列的原理为什么它能工作?int MaxSubSequenceSum( const int A[],int N)
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/08/28 07:55:54
求最大子序列的原理
为什么它能工作?
int MaxSubSequenceSum( const int A[],int N)
{
int ThisSum,MaxSum,j;
MaxSum = 0;
for( j = 0; j < N; j++)
{
ThisSum += A[j];
if(ThisSum > MaxSum)
MaxSum = ThisSum;
else if(ThisSum < 0)
ThisSum = 0;
}
return ThisSum;
}
这是《数据结构与算法分析》的例子,
为什么它能工作?
int MaxSubSequenceSum( const int A[],int N)
{
int ThisSum,MaxSum,j;
MaxSum = 0;
for( j = 0; j < N; j++)
{
ThisSum += A[j];
if(ThisSum > MaxSum)
MaxSum = ThisSum;
else if(ThisSum < 0)
ThisSum = 0;
}
return ThisSum;
}
这是《数据结构与算法分析》的例子,
在这一遍扫描数组当中,从左到右记录当前子序列的和ThisSum,若这个和不断增加,那么最大子序列的和MaxSum也不断增加(不断更新MaxSum).如果往前扫描中遇到负数,那么当前子序列的和将会减小.此时ThisSum 将会小于MaxSum,当然MaxSum也就不更新.如果ThisSum降到0时,说明前面已经扫描的那一段就可以抛弃了,这时将ThisSum置为0.然后,ThisSum将从后面开始将这个子段进行分析,若有比当前MaxSum大的子段,继续更新MaxSum.这样一趟扫描结果也就出来了.
const int function(const int a,int b)const;怎么解释?举例说明
c语言 集合a-b#include #include int cmp(const int *a,const int *b
求 函数递归问题#include sub(int *a,int n,int k); void main() { int
int max(int a,int
#include sub(int *a,int n,int k) { if(k
下列程序的输出结果是#define N 20void fun (int a[ ],int n,int m){int i,
inline INT::INT(int n) //1
请编写函数void countvalue(int *a,int *n),它的功能是:求出1到1000之内能被7或11整除
#includeint a(int x);int b(int y);int main(){int m,n;n=6;m=a
int& abc(int a,int b,int c){ return a + b + c; 为什么错误
16、下面程序的运行结果是:int f( int a[],int n) { if(n>1) return a[0]+f(
求前m大的数 c语言#includevoid main(){int a[50000],b[50000];int n,m,