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];
        }
    };
  • 相关阅读:
    数论初步
    最大流
    vue + elemen 初始化项目--构建
    call, appply , bind
    动态引入全局组件
    少见好用的js API
    vue父子组件通讯
    vue优化相关---性能篇
    vue推荐文章
    webpack4.x系列--资源和样式解析
  • 原文地址:https://www.cnblogs.com/LiuQiujie/p/12509307.html
Copyright © 2011-2022 走看看