【力扣】123. 买卖股票的最佳时机 III

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入:prices = [3,3,5,0,0,3,1,4]
输出:6
解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。
  随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3 。
示例 2:

输入:prices = [1,2,3,4,5]
输出:4
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。  
  注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。  
  因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
示例 3:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这个情况下, 没有交易完成, 所以最大利润为 0。
示例 4:

输入:prices = [1]
输出:0

提示:

1 <= prices.length <= 105
0 <= prices[i] <= 105

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii
著作权归领扣网络所有。非商业转载请注明出处。

public int maxProfit(int[] prices) {        //动态规划:            //时间复杂度O(n)            //空间复杂度O(1)        //当天一种有几种状态            //1.不买 - 利润为0            //2.进行了一次买操作 buy1                //初始值:buye1=-price[0]; --即买第一个                //buy1 = Math.max(buy1[i-1],-prices[i]) //后续比较前一个和当前的每一个哪个更大            //3.进行了一次买操作和一次卖操作,即完成了一笔交易; sell1                //初始值:sell1=0                //sell1 = Math.max(buy1[i-1]   prices[i],sell1[i-1]); //如果之前卖出了,就取之前卖出的;之前买入了就用买入的加上当前的价格            //4.在完成了一笔交易的前提下,进行了第二次买操作;buy2                //初始值:buye2=-price[0]; --即买第一个                //buy2 = Math.max(buy2[i-1],sell1[1]-prices[i]) //后续比较前一个和当前的每一个哪个更大            //5.完成了全部两笔交易。 sell2                //初始值:sell2=0                //sell2= Math.max(sell2[i-1],buy2[i-1]   prices[i]);        int buy1 = -prices[0] , buy2 = -prices[0];        int sell1 = 0 , sell2 = 0;        int tempBuy1 = buy1;        int tempSell1 = sell1;        int tempBuy2 = buy2;        for(int i = 1; i < prices.length ; i  ){            tempBuy1 = buy1;            tempSell1 = sell1;            tempBuy2 = buy2;            buy1 = Math.max(tempBuy1,-prices[i]);            sell1 = Math.max(tempBuy1   prices[i],tempSell1);            buy2 = Math.max(tempBuy2,sell1-prices[i]);            sell2= Math.max(sell2,tempBuy2   prices[i]);        }        return sell2;    }

来源:https://www.icode9.com/content-4-820601.html

(0)

相关推荐

  • 如何加仓减仓,赚钱不是梦

    在炒股票全过程中,买入是人们常常会开展的实际操作,可是如何买入算是恰当的方式?这一你是不是真实的掌握?买入实际操作的好,能够我们一起被罩的资产迅速抢反弹,还可以我们一起更强的盈利,可是买入加的不太好, ...

  • Python|你真“贪心”之买股票

    引言 当今社会很多人都喜欢选择一种投资方式-买股票.股票波动比较大,自然风险也很高,当然如果方向选择正确,获益也是比较高的.那么用贪心算法解决买股票的题再合适不过了.因为大家都是想低价买入,高价卖出, ...

  • ​LeetCode刷题实战188:买卖股票的最佳时机 IV

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • Python|买卖股票的最佳时机

    问题描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润.注意:你不能在买入股票前卖出股 ...

  • 贪心算法:买卖股票的最佳时机II

    贪心有时候比动态规划更巧妙,更好用! 通知:一些录友基础比较薄弱,不知道从哪里开始刷题.可以看一下公众号左下角的「算法汇总」,「算法汇总」已经把题目顺序编排好了,这是全网最详细的刷题顺序了,方便录友们 ...

  • 老股民手把手教你如何用KDJ精准买卖股票 收藏

    首先我们先来看下什么叫:KDJ指标 KDJ指标又叫随即指标,由K线.D线和J线三条曲线所组成,是一种中短线的技术指标分析指标. KDJ指标只判断股票的超买超卖的现象,在KDJ指标中则融合了引用了平均线 ...

  • 20年老股民买卖股票不亏战法,只看这两条均线

    两条均线:5均线和8均线. 一个简单的2条均线就可以应对复杂的走势,可以在任何复杂的市场生存,无论大盘怎么走,绝对安全的操作.大盘不符合条件股都不买. 操作方法: ①确认站上5周线进入,站上8周线加仓 ...

  • 一个短线炒股高手买卖股票方法,可以收藏!

    每一个完整的波段,基本上包括8根到10根K线.其中,在上升通道(或者下降通道)中,一般有5根到7根上涨(下跌),3根振荡下跌(回升),上一个组合 运行完毕,再度进入下一个组合,两个组合之间的衔接转换K ...

  • 成交量买卖股票

    这是上升趋势,量升价涨 这是下降趋势,要知道一个趋势是怎么形成的,下面来讲讲成交量买卖原则 成交量买卖原则: 1.只选取主要趋势向上,正处于上升通道的股票进行操作,决不理会重要趋势明显处于下降通道的股 ...

  • RSI指标是如何计算的?股票高手教你正确买卖股票

    RSI指标交叉信号有很好的实战作用.如何运用RSI指标交叉信号?下面我们一起来看一看! 1.死叉信号 股价经过一段时间的上涨走势后,在高位区域6日RSI线与12日RSI线形成死叉,其死叉信号也不受绝对 ...

  • 大道至简:原来买卖股票可以这样?

    大道至简:原来买卖股票可以这样?