码迷,mamicode.com
首页 > 其他好文 > 详细

每日编程-20170407

时间:2017-04-07 14:15:47      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:vector   实践   auto   序列   ret   back   每日   fit   题目   

题目描述
在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于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

标签:vector   实践   auto   序列   ret   back   每日   fit   题目   

原文地址:http://www.cnblogs.com/linhaowei0389/p/6677830.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!