最大子数组二

来源:互联网 发布:linux mount iso 编辑:程序博客网 时间:2024/04/29 13:23

上次写了个算法导论的实现方法,然后继续看练习题发现可以用更简单的方式去实现,利用线性的方式去实现O(n)复杂度的算法。思想是记录从左边记录自己当前处理过的最大子数组,然后进行连续记录,如果加和小于0,则置为0,继续进行加和求解!

具体代码如下:

int Find_MaxiMum_SubArray2(int *A,int low,int high,int& max_left,int& max_right,int& max_value){max_left = low;max_right= low;max_value  = 0;int ThisSum=0;int tmp_left=low;for (int i = low; i < high+1; i++){ThisSum += A[i];if (ThisSum>max_value){max_value = ThisSum;max_right = i;max_left = tmp_left;}else if(ThisSum<0){ThisSum = 0;tmp_left = i+1;}}return 0;}

发现代码比原来更短,且时间复杂度更好。