zoukankan      html  css  js  c++  java
  • Maximum Subarray

    Dynamic Programming

    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.

    C++实现代码:

    #include<iostream>
    #include<climits>
    using namespace std;
    
    class Solution {
    public:
        int maxSubArray(int A[], int n) {
            if(n==0)
                return 0;
            int maxSum=0;
            int sum=0;
            int i;
            int max=INT_MIN;
            for(i=0;i<n;i++)
            {
                if(A[i]>=0)
                   break;
                if(A[i]>max)
                    max=A[i];
            }
            if(i>=n)
                return max;
            for(i=0;i<n;i++)
            {
                sum+=A[i];
                if(maxSum<sum)
                {
                    maxSum=sum;
                }
                if(sum<0)
                    sum=0;
            }
            return maxSum;
        }
    };
    
    int main()
    {
        Solution s;
        int A[10]={-2,-3,-8,0};
        cout<<s.maxSubArray(A,10)<<endl;
    }

    注意:其中至少包含一个数,所以当全是负数时,只能返回最大的负数。。

  • 相关阅读:
    02.两数相加
    1480. 一维数组的动态和
    01. 两数之和
    67.二进制求和
    文献阅读(QoS-Aware Web Service Recommendation by Collaborative Filtering)
    服务计算---课程总结报告
    125. 验证回文串
    Docker 常用命令
    Docker 安装
    RESTful
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4111942.html
Copyright © 2011-2022 走看看