最大连续子序列和

来源:互联网 发布:version mac 破解版 编辑:程序博客网 时间:2024/05/01 12:07


#include <iostream>#include <cstring>#include <string>using namespace std;int one(int A[], int n){int MaxSum = 0;for(int i=0; i<n; i++){int ThisSum = A[i];for(int j=i+1; j<n; j++){ThisSum += A[j];if(ThisSum > MaxSum)MaxSum = ThisSum;}}return MaxSum;}int two(int A[], int l , int r){if(l==r){               //递归出口if(A[l]>0)return A[l];elsereturn 0;}int mid = (l+r)/2;int LeftMax = two(A, l, mid);    //计算左区间最值int RightMax = two(A, mid+1, r); //计算右区间最值int leftmax=0, leftsum=0;         //计算从mid开始的到l的最大连续子序列和for(int i=mid; i>=l; i--){leftsum += A[i];if(leftsum > leftmax)leftmax = leftsum;}int rightmax=0, rightsum=0;        //计算从mid+1到r的最大连续子序列和for(int i=mid+1; i<r; i++){rightsum += A[i];if(rightsum > rightmax)rightmax = rightsum;}return max(max(LeftMax, RightMax), leftmax+rightmax);  //三值比较}int three(int A[], int n){int MaxSum = 0,  ThisSum = 0;for(int i=0; i<n; i++){ThisSum += A[i];if(ThisSum > MaxSum)MaxSum = ThisSum;       //MaxSum记录着之前的最大值else if(ThisSum < 0)ThisSum = 0;}return MaxSum;}int main(){int A[8] = {4, -3, 5, -2, -1, 2, 6, -2};cout << "this is sol1: "<< one(A, 8) <<endl;cout << "this is sol2: "<< two(A, 0, 7) <<endl;cout << "this is sol3: "<< three(A, 8) <<endl;return 0;}



0 0
原创粉丝点击