zoukankan      html  css  js  c++  java
  • leetcode -- Maximum Subarray

    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.

    分析

    ai ai+1 ... aj ... ak2 ak1 ak

    如果{ai, ai+1, …, aj, …ak}是满足要求的最大和子序列maxStr。那么如果maxStr的任一ai开头的子序列{ai …, aj}的和sum{ai …, aj} < 0,则maxStr的还有一子序列sum{aj+1 …, ak} > sum{maxStr}。这与maxStr是最大和子序列矛盾。
    因此, maxStr中任一ai开头的子序列sum{ai …, aj} 0.

    class Solution {
    public:
        int maxSubArray(int A[], int n) {
            int max = A[0], sum = 0;
            for(int i = 0; i < n; i++){
              sum += A[i];
              if(max < sum)
                max = sum;
              if(sum < 0)
                sum = 0;
            }
            return max;
        }
    };

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    常用数列
    sqrt
    树状数组
    hash
    P1102 A-B数对
    codevs 1795 金字塔 2
    P2296 寻找道路
    [USACO16JAN]子共七Subsequences Summing to Sevens
    P3397 地毯
    关于调用&&传址
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4670231.html
Copyright © 2011-2022 走看看