首页 > 代码库 > 每日编程-20170407

每日编程-20170407

题目描述
在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。
给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。
测试样例:
[10 22 5 75 65 80],6
返回:87

解答:

分别计算前i天发生一次交易的最大收益,以及i+1到n天发生一次交易的最大收益

两者求和,遍历i得到最大值

另:用迭代器的话,n都省了

本题来源是牛客网

 1 class Stock {
 2 public:
 3     int Max(int a, int b) { return a < b ? b : a; }
 4     int maxDif(vector<int>::iterator beg,const vector<int>::iterator &end) {
 5     int answer = 0;
 6     for (; beg != end; beg++)
 7     {
 8         for (auto backV = beg + 1; backV != end + 1; backV++)
 9         {
10             answer = Max(*backV - *beg, answer);
11         }
12     }
13     return answer;
14 }
15 int maxProfit(vector<int> prices,int n) {
16     // write code here
17     int answer = 0;
18     for (auto beg = prices.begin() + 1; beg != prices.end() - 2; beg++)
19     {
20         int m1 = maxDif(prices.begin(), beg);
21         int m2 = maxDif(beg + 1, prices.end() - 1);
22         answer = Max(m1 + m2, answer);
23     }
24     return answer;
25 }
26 };

 

每日编程-20170407