一个下标从 0 开始的数组的 交替和 定义为 偶数 下标处元素之 和 减去 奇数 下标处元素之 和 。
- 比方说,数组
[4,2,5,3]
的交替和为(4 + 5) - (2 + 3) = 4
。
给你一个数组 nums
,请你返回 nums
中任意子序列的 最大交替和 (子序列的下标 重新 从 0 开始编号)。
一个数组的 子序列 是从原数组中删除一些元素后(也可能一个也不删除)剩余元素不改变顺序组成的数组。比方说,[2,7,4]
是 [4,2,3,7,2,1,4]
的一个子序列(加粗元素),但是 [2,4,2]
不是。
示例 1:
输入:nums = [4,2,5,3] 输出:7 解释:最优子序列为 [4,2,5] ,交替和为 (4 + 5) - 2 = 7 。
示例 2:
输入:nums = [5,6,7,8] 输出:8 解释:最优子序列为 [8] ,交替和为 8 。
示例 3:
输入:nums = [6,2,1,2,4,5] 输出:10 解释:最优子序列为 [6,1,5] ,交替和为 (6 + 5) - 1 = 10 。
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 105
前两天出了点事,导致力扣连续三百天的打卡断掉了,瞬间有些迷惘。
寄。
动态规划。
乍一看似乎需要考虑的东西有点多,实际上,可以想到:当前选定长度为奇数的交替和,实际上就等于长度为偶数的交替和加上当前位置的数字。而长度为偶数的交替和,等于当前长度为奇数的交替和减去当前位置的数字。
class Solution { public long maxAlternatingSum(int[] nums) { long dp1 = nums[0]; long dp2 = 0L; for (int i = 1; i < nums.length; i ++) { dp2 = Math.max(dp2, dp1 - nums[i]); dp1 = Math.max(0, dp2 + nums[i]); } return dp1; } }标签:力扣,dp2,dp1,nums,---,交替,数组,序列,1911 From: https://www.cnblogs.com/allWu/p/17545619.html