Maximum Subarray

It's obvious an DP problem.

Let's define:

dp[i]:= the maximum sum of subarray in the first i elements.

 

From the base point, the optimal subarray may contain element A[i] or not.

  1. optimal subarray without A[i], so dp[i]=dp[i1].
  2. optimal subarray ending with A[i].

There're some subtle issues about the second situation. In order to get the second case, we need to know the optimal solution of array ending with A[i1].

 

So, we have to define another dp table:

End[i]:= the maximum sum of subarray ending with A[i].

Obviously, the End array satisfies:

1
End[i] = max(End[i-1] + A[i], A[i]);

 In fact, we can simplify as

1
End[i] = (End[i-1] > 0) ? End[i-1] + A[i] : A[i];

 

As both dp[i] and End[i] only relate the previous step, we can use a variable instead of an array to store the result.

1
2
end = (end > 0) ? end + A[i] : A[i];
dp = max(dp, end);

 

Of course, at the initial stage, we consider only one element A[0], thus, we can initialize dp,end as: 

1
dp = end = A[0];

 


The complete code is:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
    int maxSubArray(int A[], int n) {
        int dp = A[0];
        int end = dp;
         
        for(int i = 1; i < n; ++i){
            end = end > 0 ? end + A[i] : A[i];
            dp = dp > end ? dp : end;
        }
         
        return dp;
    }
};

 

posted @   kid551  阅读(146)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示