zoukankan      html  css  js  c++  java
  • 714. 买卖股票的最佳时机含手续费

    714. 买卖股票的最佳时机含手续费

    题目链接:714. 买卖股票的最佳时机含手续费(中等)

    给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。

    你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

    返回获得利润的最大值。

    注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。

    示例 1:

    输入:prices = [1, 3, 2, 8, 4, 9], fee = 2
    输出:8
    解释:能够达到的最大利润:  
    在此处买入 prices[0] = 1
    在此处卖出 prices[3] = 8
    在此处买入 prices[4] = 4
    在此处卖出 prices[5] = 9
    总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8

    示例 2:

    输入:prices = [1,3,7,5,10,3], fee = 3
    输出:6

    提示:

    • 1 <= prices.length <= 5 * 104

    • 1 <= prices[i] < 5 * 104

    • 0 <= fee < 5 * 104

    解题思路

    本题与122. 买卖股票的最佳时机 II 还是有很多相似之处,区别每一次交易都需要手续费。

    我们在历史最低价时买入,在 当前价格 - 历史最低价格 - 手续费 > 0 时卖出。在卖出后需要更新历史最低价,这需要注意的是对于卖出后更新最低价格还要减去一个手续费,因为假如后面还有价格更高的股票,此次交易只是一个中间过程而已,并不算是一次交易。

    如示例2,在prices[2] - min - fee = 7-1-3 = 3 > 0, 但后面还有最高价 10,所以我们将更新的历史最小值为 min = 7 - 3 = 4 (减去手续费,此次交易只是一个中间过程)。

    C++

    class Solution {
    public:
        int maxProfit(vector<int>& prices, int fee) {
            int min = prices[0];
            int result = 0;
            for (int i = 1; i < prices.size(); i++) {
                if (prices[i] - min -fee > 0) {
                    result += (prices[i] - min - fee);
                    // 更新低价,如遇到更高价格,要抵消fee,相当于阶段性的最低买最高卖, 可实现持续累加,最低买最高卖,仅一次手续费
                    min = prices[i] - fee;
                }
                if (min > prices[i]) {
                    min = prices[i];
                }
            }
            return result;
        }
    };

    JavaScript

    var maxProfit = function(prices, fee) {
        let min = prices[0];
        let result = 0;
        for (let i = 0; i < prices.length; i++) {
            if (prices[i] - min - fee > 0) {
                result += prices[i] - min - fee;
                min = prices[i] - fee;
            }
            if (prices[i] < min) {
                min = prices[i];
            }
        }
        return result;
    };

     

  • 相关阅读:
    强化学习
    nginx环境准备
    全面解读PHP-数据结构
    全面解读PHP-数据库缓存
    跨域问题的解决方法
    使用 apt-get 清理
    怎样用 Bash 编程:逻辑操作符和 shell 扩展
    怎样用 Bash 编程:语法和工具
    使用 split 命令分割 Linux 文件,使用 cat 合并文件
    通过tar包解压安装docker
  • 原文地址:https://www.cnblogs.com/wltree/p/15764087.html
Copyright © 2011-2022 走看看