zoukankan      html  css  js  c++  java
  • leetcode 123 Best Time to Buy and Sell Stock III

    参考:https://www.cnblogs.com/grandyang/p/4281975.html

      https://blog.csdn.net/linhuanmars/article/details/23236995

    动态规划的题

    local[i][j]:到第i天最多进行j次交易,且最后一次交易在第i天卖出,此时的最大的利润。

    global[i][[j]:到第i天最多进行j次交易,此时的最大利润。

    local的递推公式为:local[i][j]=max(global[i-1][j-1]+max(diff,0),local[i-1][j]+diff),其中,

      global[i-1][j-1]+max(diff,0)表示,在第i-1天共进行了j-1次交易,里面有两种情况:

        1. 第j-1次交易的卖出在i-1天之前,此时最后一次交易要么是i-1天买入,i天卖出(利润为diff),要么是i天买入,i天卖出(利润为0);

        2. 第j-1次交易的卖出在第i-1天,此时,最后一次交易要么是i-1天买入,i天卖出(也就是说,j-1次交易的卖出在第i-1天,j次交易的买入在第i-1天,卖出在第i天,利润为diff,此时global[i][j-1]=global[i][j]),要么是i天买入,i天卖出(利润为0)。

      local[i-1][j]+diff,local[i-1][j]表示第j次交易的卖出在第i-1天,+diff表示将第j次交易的卖出移动到第j天。

    global[i][j]的递推公式为:global[i][j]=max(global[i-1][j],local[i][j]),其中,global[i-1][j]表示最后一次卖出在第i天之前,local[i][j]表示最后一次卖出在第i天。

    class Solution {
    public:
        int maxProfit(vector<int>& prices) {
            if(prices.empty()) return 0;
            int l[3]={0},g[3]={0};
            for(int i=0;i<prices.size()-1;++i) {
                int diff=prices[i+1]-prices[i];
                for(int j=2;j>0;--j) {
                    l[j]=max(g[j-1]+max(diff,0),l[j]+diff);
                    g[j]=max(g[j],l[j]);
                }
            }
            return g[2];
        }
    };
  • 相关阅读:
    Day 24 Network Programming
    Day 22 23 Network Programming
    Day 21 OOP
    Day 20 OOP
    Day 19 OOP
    Day 18 OOP 面向对象编程
    Day 17 Frequently-used modules
    4--jenkins部署tomcat
    3--Jenkins详解 、用户权限、构建maven、参数化构建
    5--Zabbix分布式 监控 ; snmp监控
  • 原文地址:https://www.cnblogs.com/LiuQiujie/p/12509307.html
Copyright © 2011-2022 走看看