博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode] Best Time to Buy and Sell Stock with Cooldown
阅读量:4965 次
发布时间:2019-06-12

本文共 1553 字,大约阅读时间需要 5 分钟。

题目:

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天是否买入;数组sell表达卖出的最大利润,它需要考虑第i天是否卖出。然后写出下面的递推公式:

buy[i] = max(buy[i-1], sell[i-2] - prices[i])

sell[i] = max(sell[i-1], buy[i-1] + prices[i])

其中buy[0] = -prices[0], buy[1] = max(-prices[0], -prices[1]), sell[0] = 0, sell[1] = max(0, prices[1] - prices[0])

比如:

prices:1,  2,  3, 0, 2buy:   -1, -1, -1, 1, 1 sell    0,  1,  2, 2, 3

代码:

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];    }

 

转载于:https://www.cnblogs.com/lasclocker/p/5003534.html

你可能感兴趣的文章
MP3的播放与停止
查看>>
牛客(59)按之字形顺序打印二叉树
查看>>
JavaScript 图表库 xCharts
查看>>
Android项目的目录结构
查看>>
C++中“引用”的底层实现
查看>>
Spring Cloud与微服务构建:微服务简介
查看>>
Babel 是干什么的
查看>>
cocos2dx-3.0(8)------Label、LabelTTF、LabelAtlas、LabelBMFont使用之法
查看>>
CODE[VS] 1842 递归第一次
查看>>
20180418小测
查看>>
数字三角形
查看>>
NGUI 减少drawcall规则
查看>>
三元表达,匿名函数
查看>>
前端笔记-基础笔记
查看>>
【LeetCode & 剑指offer刷题】查找与排序题6:33. Search in Rotated Sorted Array(系列)
查看>>
GNU/Linux超级本ZaReason Ultralap 440体验
查看>>
将github上托管的代码 在我的域名下运行
查看>>
【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize
查看>>
【codeforces 767A】Snacktower
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>