首页 » 编程之美 » 正文

[leetcode_121]Best Time to Buy and Sell Stock

这个题我真心没想到我竟然独立AC了,中间过程好曲折啊。所以坚持就是胜利。
题意大致是:
买股票,只能有一次买卖的机会。问你在某天买,之后的某天卖,请问如何获得最大的收益。
我擦,我想这个多简单,我直接暴力不就行了。
果然呵呵了。TLE
后来想破脑子的想啊,怎么降低时间复杂度啊。
快排啊?
贪心啊?觉得和2sum问题很像,特别是画了竖直线以后。
后来一下。。。咦。。。天与天之间是有高度差的。如果求出这个差,然后求出连续子序列最大和。这个问题不就解决了?
抱着试一试的心态,我去~~~AC啦 阿和~
附上代码:

class Solution {
public:
    int maxProfit(vector<int> &prices) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        int max = 0;<br />
        if(prices.size() &lt;= 1)
            return max;
        vector&lt;int&gt;dis(prices.size()-1);
        for(int i = 1;i &lt; prices.size();i++)
        {
            dis[i-1] = prices[i] - prices[i-1];<br />
        }
        vector&lt;int&gt;value(dis.size());
        for(int i = 0;i &lt; dis.size();i++)
        {
            value[i] = dis[i];
        }
        if(dis[0] &lt; 0)
            value[0] = 0;
        else
            value[0] = dis[0];
        for(int i = 1;i &lt; value.size();i++)
        {
            if(value[i-1] + value[i] &lt; 0)
            {
                value[i] = 0;
            }
            else
            {
                value[i] = value[i-1] + value[i];
            }
        }
        for(int i = 0;i &lt; value.size();i++)
        {
            if(value[i] &gt; max)
            {
                max = value[i];
            }
        }
        return max;
    }
};

发表评论