leetcode-53.最大子序和

题意

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

算法(DP O(n))

定义待返回变量 ans(初值nums[0]), 中间累加变量 sum(初值0)

遍历给定数组

如果sum大于0,sum求和当前元素值;否则,当前元素值赋值sum

如果sum大于ans, sum赋值ans

code

 1 class Solution {
 2 public:
 3     int maxSubArray(vector<int>& nums) {
 4         int ans = nums[0];
 5         int sum = 0;
 6         for(auto num : nums)
 7         {
 8             if(sum > 0)
 9             {
10                 sum += num;
11             }
12             else
13             {
14                 sum = num;
15             }
16             if(sum > ans)
17             {
18                 ans = sum;
19             }
20         }
21         return ans;
22     }
23 };