一个下标从 0 开始的数组的 交替和 定义为 偶数 下标处元素之 和 减去 奇数 下标处元素之 和 。
比方说,数组 [4,2,5,3] 的交替和为 (4 + 5) - (2 + 3) = 4 。
给你一个数组 nums ,请你返回 nums 中任意子序列的 最大交替和(1 <= nums.length <= 105)
思路:贪心,将数想象成股票价格的曲线图,只要存在波峰,就一定存在波谷,所以在波峰买入,在波谷卖出一定会赚。但因为题目要求子序列的奇偶位置的贡献,所以一定要波峰买出,波谷买入
class Solution {
public:
long long maxAlternatingSum(vector<int>& A) {
int n = A.size();
long long ans = 0;
A.insert(A.begin(), 0), A.insert(A.end(), 0);
bool up = true;
for (int i = 1; i <= n; i++) {
if (up) {
if (A[i-1] < A[i] && A[i] >= A[i+1]) {
ans += A[i];
up = false;
}
} else {
if (A[i-1] >= A[i] && A[i] < A[i+1]) {
ans -= A[i];
up = true;
}
}
}
return ans;
}
};