Maximum Subarray

来源:互联网 发布:linux知识点总结 编辑:程序博客网 时间:2024/06/14 05:12

题目要求:

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray [4,−1,2,1] has the largest sum = 6.

More practice:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

O(n)代码:

#include"stdafx.h"  #include <iostream>    using namespace std;    class Solution {    public:      int maxSubArray(int A[],int n)      {            if(n==0)              return 0;    int result=A[0];int Max_i=A[0];for(int i=1;i<n;i++){Max_i=max(Max_i+A[i],A[i]);result=max(Max_i,result);}        return result;      }  };   void main()  {      int A[9]={-1,2,3,4,5,0,7,11,10};      Solution s;      cout<<s.maxSubArray(A,9)<<endl;      getchar();  }  
分冶代码:

#include"stdafx.h"  #include <iostream>    using namespace std;    class Solution {    public:          int maxSubArray(int A[],int n)          {               return findMaxSub(A,0,n-1);          }  int findMaxSub(int A[],int low,int high){if(low==high)return A[low];int mid=(low+high)/2;int lmax=findMaxSub(A,low,mid);int rmax=findMaxSub(A,mid+1,high);int midmax=A[mid];int sum=0;for(int i=mid;i>=low;i--){sum+=A[i];if(sum>midmax)midmax=sum;}sum=midmax;        for(int i=mid+1;i<=high;i++){sum+=A[i];if(sum>midmax)midmax=sum;}return max(max(lmax,rmax),midmax);}};   void main()  {      int A[9]={-1,2,3,4,5,0,7,11,10};      Solution s;      cout<<s.maxSubArray(A,9)<<endl;      getchar();  }  



0 0
原创粉丝点击