zoukankan      html  css  js  c++  java
  • leetcode 309. Best Time to Buy and Sell Stock with Cooldown

    题意

    买股票,中间买卖完一次后必须休息一下,求最大收益

    题解

    建议观看视频 ->->->-> https://www.bilibili.com/video/av31578180

    状态转移图

    buy[i] 代表当前持有股票的最大收益
    sell[i] 代表当前卖出股票的最大收益
    rest[i] 代表当前休息的最大收益

    class Solution {
    public:
        // buy[i] -> util day i hold the stock max profit
        // sell[i] -> util day i sell the stock i max profit
        // rest[i] -> util day i rest max profit
        int maxProfit(vector<int>& prices) {
            const int INF = 0x3f3f3f3f;
            int len = prices.size();
            int buy[len+1] = {0};
            int sell[len+1] = {0};
            int rest[len+1] = {0};
            buy[0] = -INF; rest[0] = 0; sell[0] = 0;
            for(int i=1; i<=len; i++) {
                buy[i] = max(buy[i-1], rest[i-1] - prices[i-1]);
                sell[i] = prices[i-1] + buy[i-1];
                rest[i] = max(rest[i-1], sell[i-1]);
            }
            return max(sell[len], rest[len]);
        }
    };
    

    滚动数组优化空间

    class Solution {
    public:
        // buy[i] -> util day i hold the stock max profit
        // sell[i] -> util day i sell the stock i max profit
        // rest[i] -> util day i rest max profit
        int maxProfit(vector<int>& prices) {
            const int INF = 0x3f3f3f3f;
            int len = prices.size();
            int buy[2] = {0};
            int sell[2] = {0};
            int rest[2] = {0};
            buy[0] = -INF; rest[0] = 0; sell[0] = 0;
            for(int i=1; i<=len; i++) {
                buy[i % 2] = max(buy[(i-1) % 2], rest[(i-1) % 2] - prices[i-1]);
                sell[i % 2] = prices[i-1] + buy[(i-1) % 2];
                rest[i % 2] = max(rest[(i-1) % 2], sell[(i-1) % 2]);
            }
            return max(sell[len%2], rest[len%2]);
        }
    };
    
  • 相关阅读:
    Form表单提交数据的几种方式
    前端基础-HTML
    python入门函数详解
    Python作业编写
    Python入门数据类型详解
    Jquery选择器
    做外链接和有外链接区别
    三层架构
    drop,delete,truncate区别
    run()和star()区别
  • 原文地址:https://www.cnblogs.com/Draymonder/p/11298982.html
Copyright © 2011-2022 走看看