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

122. Best Time to Buy and Sell Stock II

时间:2016-06-15 06:58:21      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

1.

ref: http://blog.csdn.net/linhuanmars/article/details/23164149

区别是这里可以交易无限多次(当然我们知道交易不会超过n-1次,也就是每天都进行先卖然后买)。既然交易次数没有限定,可以看出我们只要对于每次两天差价大于0的都进行交易,就可以得到最大利润。因此算法其实就是累加所有大于0的差价既可以了,非常简单。如此只需要一次扫描就可以了,时间复杂度是O(n),空间上只需要O(1)存一个累加结果即可。

 1     public int maxProfit(int[] prices) {
 2         if(prices.length < 1) {
 3             return 0;
 4         }
 5         int diff = 0;
 6         for(int i = 1; i < prices.length; i++) {
 7             diff += (prices[i] - prices[i-1] > 0)? prices[i] - prices[i-1]: 0;
 8         }
 9         return diff;
10     }

 2. 动规

维护两个变量:

1. 今天结束,手上没有股票

  1)以前没有股票,今天什么都没做

  2)以前有股票,今天买了

2. 今天结束,手上有股票

  1)以前没有股票,今天买入

  2)以前有股票,今天什么都没做

 1     public int maxProfit(int[] prices) {
 2         if(prices.length < 1) {
 3             return 0;
 4         }
 5         int noStock = 0;
 6         int haveStock = 0 - prices[0];
 7         for(int i = 1; i < prices.length; i++) {
 8             int oldNoStock = noStock;
 9             noStock = Math.max(noStock, haveStock + prices[i]);
10             haveStock = Math.max(haveStock, noStock - prices[i]);
11         }
12         return noStock;
13     }

 

122. Best Time to Buy and Sell Stock II

标签:

原文地址:http://www.cnblogs.com/warmland/p/5586105.html

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