leetcode-121 Best Time to Buy and Sell Stock

来源:互联网 发布:达内培训 大数据 编辑:程序博客网 时间:2024/05/23 02:07

只有一次交易的情况比较简单,就是最大减去最小,但是最小的值一定要出现在最大之前

<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>


0 0