Leetcode::Best Time to Buy and Sell Stock11

本文介绍了一种在给定股票价格序列的情况下实现股票买卖最大收益的算法。该算法允许进行多次买卖交易,前提是每次交易手中只能持有一股。通过扫描价格序列并抓住每个上升趋势,确保所有可能的利润都被计算在内。

题目要求可以多次买卖,但是同一时间只能有一股在手里。

       这样就可以在每次上升子序列之前买入,在上升子序列结束的时候卖出。相当于能够获得所有的上升子序列的收益。
而且,对于一个上升子序列,比如:5,1,2,3,4,0 中的1,2,3,4序列来说,对于两种操作方案:
一,在1买入,4卖出;
二,在1买入,2卖出同时买入,3卖出同时买入,4卖出;
这两种操作下,收益是一样的。


所以算法就是:从头到尾扫描prices,如果i比i-1大,那么price[i] – price[i-1]就可以计入最后的收益中。这样扫描一次O(n)就可以获得最大收益了。

 

class Solution {
public:
int maxProfit(vector<int> &prices) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int sum = 0;

for( int i = 0; i+1 < prices.size() ; ++i )
{
if( prices[i+1] - prices[i] > 0)
{
sum+= prices[i+1] - prices[i];
}
}

return sum;
}
};

转载于:https://www.cnblogs.com/litana/archive/2013/05/28/3103019.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值