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 };