b_lc_最大子序列交替和(贪心:股票变形)

一个下标从 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;
    }
};
posted @ 2021-07-05 20:37  童年の波鞋  阅读(76)  评论(0编辑  收藏  举报