zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    
  • 相关阅读:
    JDBC MySQL 实例之 用户管理系统
    利用JDBC连接数据库(MySQL)
    CSS01
    HTML01
    GUI编程02
    GUI编程01
    名词解释
    Navicat MySQL安装
    Eclipse安装Web/JavaEE插件、Eclipse编写HTML代码
    Pascal输出星星
  • 原文地址:https://www.cnblogs.com/wdt1/p/14974286.html
Copyright © 2011-2022 走看看