int MaxSum; for(int i = 0 ; i < n ; i ++){ for(int j = i ; j < n ; j ++){ intsum = 0; for(int k = i ; k <= j ; k ++){ sum += a[k]; } if(sum > MaxSum){ MaxSum = sum; } } }
方法二:O(N^2)
1 2 3 4 5 6 7 8 9 10 11 12
int MaxSum = 0 ; for(int i = 0 ; i < size ; i ++){ intsum = 0 ; for(int j = i ; j < size ; j ++){ sum += a[j]; if(sum > MaxSum ){ MaxSum = sum; start = i; end = j; } } }
int MaxSumProcess(int a[],int size){ int MaxSum = 0; int thisSum = 0; int start = 0; int tmp = 0; int end = 0; for(int i = 0;i < size;i ++){ thisSum += a[i]; if(thisSum <= 0){ thisSum = 0; MaxSum = 0; tmp = i + 1; }elseif(thisSum > MaxSum){ MaxSum = thisSum; start = tmp; end = j; } } if(start == size){ MaxSum = 0; } return MaxSum; }
显然,这种类似于动态规划的方法,时间复杂度达到了O(N)!
数据结构的实现
过程化程序设计 VS 面向对象程序设计:过程化程序设计通过定义一组变量进行存储实现,通过一组算法进行运算实现,但是无法将数据结构定义成一个真正的程序,程序员必须掌握每个数据结构的实现。而面向对象的程序设计将存储与运算封装为类,每个数据结构可表示为一个类模板,有利于代码的重用。 每种数据结构用一个抽象类描述,指出该数据结构提供的操作。而每种数据结构可以有若干种实现的方法,每种实现就是一个类(从抽象类继承)。