题解 | #买卖股票的最好时机 ii#
买卖股票的最好时机 ii
http://www.nowcoder.com/practice/572903b1edbd4a33b2716f7649b4ffd4
原始思路:
找到最大值,然后在最大值(第1次)的左边部分找最小值;之后在右边部分找最大值,再在该最大值(第2次)的左边部分,最大值(第1次)的右边部分,找此范围的最小值,以此类推,每一次的差值加和,即为最终的最大利润。
这个思路的错误之处在于,只考虑最大和最小的差值,实际上,在允许任意数量的交易(例如,多次购买和出售股票的一股)的情况下,想要利润最大化,就应该买入之后,有增长就卖,换句话说,就是判断相邻是否递增,因为连续递增可以合起来看为一次买入卖出操作,也就是最开始我想法中的最大值减最小值的操作,所以统计所有递增量即可。
代码如下:
class Solution { public: /** * * @param prices int整型vector * @return int整型 */ int maxProfit(vector<int>& prices) { // write code here int len = prices.size(); int profit=0;//记录利润 if(len < 2 ) { return 0;//当天买当天卖 } for(int i=0;i<len-1;i++) { if(prices[i]<prices[i+1]) { profit+=(prices[i+1]-prices[i]); } } return profit; } };
牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法