1 /*
 2  * @Author: yaodaoteng
 3  * @Date: 2020-11-26 20:45:05
 4  * @LastEditors: yaodaoteng
 5  * @LastEditTime: 2020-11-26 20:57:48
 6  * @FilePath: \git\leetcode\53.最大子序和.cpp
 7  */
 8 /*
 9  * @lc app=leetcode.cn id=53 lang=cpp
10  *
11  * [53] 最大子序和
12  */
13 
14 // @lc code=start
15 class Solution {
16 public:
17     //动态规划
18     // dp[i]表示必须以nums[i]结尾的最大连续序列和,这个最大连续序列和要么是nums[i]本身,要么是nums[i]+dp[i-1]
19 
20     int maxSubArray(vector<int>& nums) {
21         int res = nums[0];
22         int dp[nums.size()];
23         dp[0] = nums[0];
24         for (int i = 1; i < nums.size();i++){
25             if(dp[i-1]+nums[i]>=nums[i])
26                 dp[i] = dp[i - 1] + nums[i];
27             else
28                 dp[i] = nums[i];
29             if(dp[i]>res)
30                 res = dp[i];
31 
32         }
33         return res;
34     }
35 };
36 // @lc code=end