• leetcode 714. Best Time to Buy and Sell Stock with Transaction Fee


    Your are given an array of integers prices, for which the i-th element is the price of a given stock on day i; and a non-negative integer fee representing a transaction fee.

    You may complete as many transactions as you like, but you need to pay the transaction fee for each transaction. You may not buy more than 1 share of a stock at a time (ie. you must sell the stock share before you buy again.)

    Return the maximum profit you can make.

    Example 1:
    Input: prices = [1, 3, 2, 8, 4, 9], fee = 2
    Output: 8
    Explanation: The maximum profit can be achieved by:
    Buying at prices[0] = 1
    Selling at prices[3] = 8
    Buying at prices[4] = 4
    Selling at prices[5] = 9
    The total profit is ((8 - 1) - 2) + ((9 - 4) - 2) = 8.
    Note:
    
    0 < prices.length <= 50000.
    0 < prices[i] < 50000.
    0 <= fee < 50000.
    

    动态规划:dp[i][1]表示第天持有能得到的最大值,dp[i][0]代表第i天不持有能得到的最大值。
    那么

    dp[i][0] = max(dp[i-1][0], (prices[i] + dp[i-1][1] - fee));
    dp[i][1] = max(dp[i-1][0] - prices[i], dp[i-1][1]);
    

    代码如下:

    class Solution {
    public:
        int maxProfit(vector<int>& prices, int fee) {
            int n = prices.size();
            vector<vector<int> > dp(n, vector<int>(2));
            for (int i = 0; i < n; ++i) {
                if (i == 0) {
                    dp[i][1] = -prices[i];
                    dp[i][0] = 0;
                } else {
                    dp[i][0] = max(dp[i-1][0], (prices[i] + dp[i-1][1] - fee));
                    dp[i][1] = max(dp[i-1][0] - prices[i], dp[i-1][1]);
                }
            }
            return dp[n-1][0];
        }
    };
    
  • 相关阅读:
    MySQL 入门教程
    .net 定时服务
    【搜索面板】规格信息单选
    【搜索面板查询】品牌单选(term过滤查询)
    【搜索框查询】搜索功能+搜索框内容回显
    商品上下架(发布订阅模式)
    Canal广告缓存实现(工作队列模式)
    FastDFS分布式文件系统(适合存储小文件 )
    跨域(浏览器限制本行为)
    购物网站项目
  • 原文地址:https://www.cnblogs.com/pk28/p/8635796.html
Copyright © 2020-2023  润新知