Leetcode 309. Best Time to Buy and Sell Stock with Cooldown

来源:互联网 发布:上海每日房屋成交数据 编辑:程序博客网 时间:2024/06/07 10:35

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times) with the following restrictions:

  • You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
  • After you sell your stock, you cannot buy stock on next day. (ie, cooldown 1 day)

Example:

prices = [1, 2, 3, 0, 2]maxProfit = 3transactions = [buy, sell, cooldown, buy, sell]

卖完股票后有一天不可以买股票

buy [i] 表示 经过一系列买卖后,buy 是最后一项,到 第 i 项 所获得的利益

sell [i] 表示 经过一系列买卖后,sell 是最后一项,到 第 i 项 所获得的利益

怎样让buy 最大?(在 第 i 项 buy 是最后一个操作,最大化所得利益)

buy[i] = max(buy[i - 1], sell [i - 2] - prices[i])
在 buy的上一项中 和 sell 上上项 减去 当前价格中,选取一个


怎样让buy 最大?(在 第 i 项 buy 是最后一个操作,最大化所得利益)

sell[i] = max(sell[i - 1], buy[i - 1] + prices[i])
在 sell 的前一项 和 buy的前一项 加上 当前价格中,选取一个

public int maxProfit(int[] prices) {        if(prices == null || prices.length <= 1) {            return 0;        }        int len = prices.length;        int[] buy = new int[len];        int[] sell = new int[len];        buy[0] = -prices[0];        buy[1] = Math.max(-prices[0], -prices[1]);        sell[0] = 0;        sell[1] = Math.max(0, prices[1]-prices[0]);        for(int i = 2; i < len; i++) {            buy[i] = Math.max(buy[i-1], sell[i-2]-prices[i]);            sell[i] = Math.max(sell[i-1], buy[i-1]+prices[i]);        }        return sell[len-1];    }




阅读全文
0 0
原创粉丝点击