zoukankan      html  css  js  c++  java
  • 动态规划(股票交易)---需要冷却期的股票交易

    需要冷却期的股票交易

    309. Best Time to Buy and Sell Stock with Cooldown(Medium)

    题目描述:

      股票交易的原则是先买然后再卖,在买入之前必须至少休息一天,求最后能够获得的最大收益。

    思路分析:

    动态规划的思想:

      sell[i],表示该天结束后手里没有股票的情况下,已经获得的最大收益。

      hold[i],表示该天结束后手里有股票的情况下,已经获得的最大收益。

    状态转移方程是这样的:

      sell[i],表示手里没有股票的收益,这种可能性是今天卖了,或者啥也没干。今天啥也没干那就是sell[i]=sell[i-1],今天卖了,那么sell[i]就是前一天有股票的收益加上今天卖出去股票的价格。sell[i]=hold[i-1]+price[i]

      因此:sell[i]=max(sell[i-1],hold[i-1]+price[i])

      hold[i],表示今天手里有股票的收益,这种可能性是今天买了股票或者啥也没干。今天啥也没干那就是hold[i]=hold[i-1],今天买了股票,那么hold[i]=sell[i-2]-price[i]

      因此:hold[i]=max(hold[i-1],sell[i-2]-price[i])

    代码:

    public int maxProfit(int []prices){
        if(prices==null||prices.length==0)
            return 0;
        int []sell=new int[prices.length];
        int []hold=new int[prices.length];
        sell[0]=0;
        hold[0]=-prices[0];
        for(int i=1;i<prices.length;i++){
            sell[i]=Math.max(sell[i-1],hold[i-1]+prices[i]);
            hold[i]=Math.max((i>=2?sell[i-2]:0)-prices[i],hold[i-1]);
        }
        return sell[prices.length-1];
    }
    
  • 相关阅读:
    Linux网络编程入门 (转载)
    linux库文件编写入门(笔记)
    动态库封装参考模板
    c++中的 extern "C"(转载)
    Python网络爬虫学习总结
    Google发布机器学习术语表 (包括简体中文)
    NoSQL 简介
    TCP和UDP的区别?
    UDP和TCP的主要特点
    2017中国互联网企业百强
  • 原文地址:https://www.cnblogs.com/yjxyy/p/11121220.html
Copyright © 2011-2022 走看看