您的位置:首页 > 其它

leetcode-121 Best Time to Buy and Sell Stock

2015-04-26 21:50 501 查看
只有一次交易的情况比较简单,就是最大减去最小,但是最小的值一定要出现在最大之前

<span style="font-family:Microsoft YaHei;font-size:14px;">class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len = prices.size();
        if(len == 0) return 0;
        int min = prices[0];
        int maxProfit = 0;
        for(int i = 1; i < len; i++){
            int tmp = prices[i] - min;
            if(tmp > maxProfit) maxProfit = tmp;
            if(prices[i] < min) min = prices[i];
        }
        
        return maxProfit;
    }
};</span>


也有人用下面的方法:

用类似动态规划的思想,到第i天买入,那么我能赚到的最大利润是多少呢?就是i + 1 ~ n天中最大的股价减去第i天的。找最大股价的问题可以在找第i+1~n天的最大利润时顺便记录,

这样就得出了一个线性方法。
<span style="font-family:Microsoft YaHei;font-size:14px;">class Solution {
public:
    int maxProfit(vector<int> &prices) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if (prices.size() == 0)
            return 0;
            
        int maxPrice = prices[prices.size()-1];
        int ans = 0;
        for(int i = prices.size() - 1; i >= 0; i--)
        {
            maxPrice = max(maxPrice, prices[i]);
            ans = max(ans, maxPrice - prices[i]);
        }
        
        return ans;
    }
};</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: