LeetCode122. Best Time to Buy an

2017-06-04  本文已影响9人  PentonBin

一、原题

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).


二、题意

给定一个数组,表示某一个特定的股票每一天的价格,则prices[i]则表示第i天该股票的价格。假如在已知每一天的该股票价格的情况下,允许多次买卖,但每一次卖出之后隔天才能买入,问如何找出最大的利润?


三、思路

假设股票的价格如下:[1,3,5,0,9,8,4,7],则我们可以很快求出其每一天买入,隔天卖出的利润:[2,2,-5,9,-1,-4,3]

对比一下每一天的利润情况:[2,2,-5,9,-1,-4,3],其中的第i个数字表示第(i-1)天买入,第i天卖出的情况

梳理一下,对于每一天的利润情况[a,b,c,d,e,f]

  1. 如果选择了连续的两个数,假设为b和c,则表示第二天买入,第四天卖出,也就是如果选择了连续两天的利润,则表示中间一天不买卖;
  2. 如果选择了不是连续的两个数,假设为a和c,则表示第一天买入,第二天卖出,第三天买入,第四天卖出;

综上,选择的数不管是否为连续的数,均满足题意“允许多次买卖,但每一次卖出之后隔天才能买入”的要求,此时只需要将每一天的利润大于0的相加则为所要求的结果。


四、代码

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.empty()){
            return 0;
        }
        int sum = 0;
        for(int i = 1; i < prices.size(); ++i){
            if(prices[i] - prices[i-1] > 0){
                sum += (prices[i] - prices[i-1]);
            }
        }
        return sum;
    }
};
上一篇下一篇

猜你喜欢

热点阅读