风口的猪---小米笔试题
2017-02-23 23:01
218 查看
风口的猪
风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<=100,0<=prices[i]<=100题目分析
动态规划思路:定义数组left,left[i]表示股票在当天能获得的最大收益,状态转移方程则可以表示为:left[i]=prices[i]-min>prices[i]?prices[i]-min:prices[i-1].
min为直到当天股市的最低值,初始化为prices[i-1],选择当天卖出,则收益为prices[i]-min,否则若收益比前一天所获得的最大利润要底,则今天选择不卖出,最大利润则为prices[i-1],和前一天保持一致
至此我们就可以写出如下代码,采用两个数组双向遍历,避免重叠问题
class Solution { public: /** * 计算你能获得的最大收益 * * @param prices Prices[i]即第i天的股价 * @return 整型 */ int calculateMax(vector<int> prices) { int len=prices.size(); vector<int> left(len,0); vector<int> right(len,0); int min=prices[0]; for(int i=1;i<len;i++){ if(prices[i]<min) min=prices[i]; left[i]=prices[i]-min>left[i-1]?prices[i]-min:left[i-1]; } int max=prices[len-1]; for(int i=len-2;i>=0;i--){ if(prices[i]>max) max=prices[i]; right[i]=max-prices[i]>right[i+1]?max-prices[i]:right[i+1]; }max=0; for(int i=0;i<len;i++){ if(left[i]+right[i]>max) max=left[i]+right[i]; }return max; } };
相关文章推荐
- 十九、< 2015小米暑期实习笔试题>风口的猪-中国牛市
- 小米笔试题 风口的猪-中国牛市
- 从风口引领者变成AI跟随者:小米在雪崩时代的技术攀爬
- 雷军:互联网硬件的崛起便是小米加速度发展的风口
- 小米笔试题 风口的猪-中国牛市
- 牛客网---2016---小米风口的猪-中国牛市
- 【经历史】风口上的雷军,小米是他最后一次创业~~传奇人生
- 2014年小米笔试题 蛇形矩阵打印
- 每日AC-小米笔试 风口的猪-中国牛市
- 风口的猪(小米实习生招聘)
- 2015小米暑期实习笔试题_风口的猪-中国牛市(dp)
- 继承--貌似小米笔试题
- 2016小米-风口的猪-中国牛市-Java
- 小米-风口的猪
- 小米笔试(风口的猪-中国牛市)
- 2015小米暑期实习笔试题_风口的猪-中国牛市(dp)
- 123. Best Time to Buy and Sell Stock III(同小米风口的猪)
- 【名企笔试】小米实习生招聘(风口的猪)
- 名企笔试:2015小米暑期实习(风口的猪-中国牛市)(2017-04-09 算法爱好者)
- 几个论坛上看到的2015小米笔试题