# 2036. Maximum Alternating Subarray Sum ###### tags: `Leetcode` `Medium` `Dynamic Programming` Link: https://leetcode.com/problems/maximum-alternating-subarray-sum/ ## 思路 subarray最值dp subarray题目状态定义:**包含**nums[i]的最值,(本题中就是最大subarray sum)然后在过程中记录最值 plusEnd表示目前为止以+结尾的subarray sum的最值 minusEnd表示目前为止以-结尾的subarray sum的最值 如果现在的符号是+说明上一个是- 或者重新开始一个subarray 也就是只取nums[i] 如果现在的符号是- 它只能是从plusEnd-nums[i]得到的 ## Code ```java= class Solution { public long maximumAlternatingSubarraySum(int[] nums) { long plusEnd = nums[0], minusEnd = Integer.MIN_VALUE, ans = plusEnd; for(int i=1; i<nums.length; i++){ long temp = minusEnd; minusEnd = plusEnd-nums[i]; plusEnd = Math.max(temp+nums[i], nums[i]); ans = Math.max(ans, Math.max(plusEnd, minusEnd)); } return ans; } } ```