这个题我真心没想到我竟然独立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() <= 1) return max; vector<int>dis(prices.size()-1); for(int i = 1;i < prices.size();i++) { dis[i-1] = prices[i] - prices[i-1];<br /> } vector<int>value(dis.size()); for(int i = 0;i < dis.size();i++) { value[i] = dis[i]; } if(dis[0] < 0) value[0] = 0; else value[0] = dis[0]; for(int i = 1;i < value.size();i++) { if(value[i-1] + value[i] < 0) { value[i] = 0; } else { value[i] = value[i-1] + value[i]; } } for(int i = 0;i < value.size();i++) { if(value[i] > max) { max = value[i]; } } return max; } };