每日编程-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 };