代码改变世界

Best Time to Buy and Sell Stock II

2015-04-08 10:45  笨笨的老兔子  阅读(129)  评论(0编辑  收藏  举报

给定一个股票价格的时间序列,必须先买后卖,买之前必须卖出已有的,可以多次交易,求最大收益是多少

思路:
假设三天内的价格为1 2 3,那第一天买入,第三天卖出收益最大,等价做法是第一天买入第二天卖出,第二天买入,第三天卖出。
假设三天内价格为3 2 1,那就没有收益了。
假设三天内的价格为2 1 3,第二天买入,第三天卖出。
以上规律可以看出就是求出每一次的递增子序列的头和尾的差,也可以逐个求得即sum += prices[i] - prices[i - 1] > 0 ? prices[i] - prices[i - 1] : 0

  1. class Solution {
  2. public:
  3. int maxProfit(vector<int> &prices) {
  4. int sum = 0;
  5. for (size_t i = 1; i < prices.size(); i++)
  6. sum += prices[i] - prices[i - 1] > 0 ? prices[i] - prices[i - 1] : 0;
  7. return sum;
  8. }
  9. };