标签:
题目描述:
在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。
给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。
测试用例:
[10,22,5,75,65,80],6
返回结果:
87
分析:首先要明确的是第 i 天卖出,是可以在第 i 天买入的。
思路:
用两个数组,一个数组preProfit[i],指的是第i+1天(数组下标从0开始)之前,当然也包括第i+1天的最大收益,需要保存的一个数据是第i+1天之前的最小价格,如果第i+1天的价格减去最小价格后的利润是要比不在这天卖出的利润大,那么就果断卖出,否则,这一天就不卖出,那么这天之前的最大利润和昨天的最大利润是一样的。这样就使用了昨天的数据,这才是正统的动态规划的思想。
另外一个数组postProfit[i]指定是第i天买入的话,之后所能获得的最大利润,需要保持一个变量记录第i+1天之后的最大价格,如果最大价格减去这一天的利润比明天之后卖出的最大利润要大的话,就卖出,否则,就等于明天之后卖出的最大利润。最后将两个数组求和,计算出总的最大利润
标签:
原文地址:http://www.cnblogs.com/GumpYan/p/5862373.html