【Leetcode】53. Maximum Subarray

题目地址:

https://leetcode.com/problems/maximum-subarray/

给定一个长 n n n的整型数组,求和最大的非空子数组的和。

f ( a 0 , a 1 , . . . , a n ) f(a_0,a_1,...,a_n) f(a0,a1,...,an)为向量 ( a 0 , a 1 , . . . , a n ) (a_0,a_1,...,a_n) (a0,a1,...,an)的最大子数组和,而 g ( a 0 , a 1 , . . . , a n ) g(a_0,a_1,...,a_n) g(a0,a1,...,an)为向量 ( a 0 , a 1 , . . . , a n ) (a_0,a_1,...,a_n) (a0,a1,...,an)的以 a n a_n an为结尾的最大子数组和。算法可以由下面的递推方程得到: f ( a 0 , a 1 , . . . , a n ) = max ⁡ k ∈ { 0 , 1 , . . . , n } g ( a 0 , a 1 , . . . , a k ) g ( a 0 , a 1 , . . . , a k ) = { a 0 ,   k = 0 max ⁡ ( 0 , g ( a 0 , a 1 , . . . , a k − 1 ) ) + a k ,   k > 0 f(a_0,a_1,...,a_n)=\max_{k\in \{0,1,...,n\}}g(a_0,a_1,...,a_k)\\ g(a_0,a_1,...,a_k)=\begin{cases}a_0,\ k = 0\\\max(0,g(a_0,a_1,...,a_{k-1}))+a_k,\ k>0\end{cases} f(a0,a1,...,an)=k{0,1,...,n}maxg(a0,a1,...,ak)g(a0,a1,...,ak)={a0, k=0max(0,g(a0,a1,...,ak1))+ak, k>0代码如下:

class Solution {
 public:
  int maxSubArray(vector<int>& a) {
    int res = -2e9, cur_sum = 0;
    for (int x : a) {
      cur_sum = max(x, cur_sum + x);
      res = max(res, cur_sum);
    }
    return res;
  }
};

时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值