题目描述:
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)
解题思路:
一只股票可进行多次买卖,获得最大利润的前提是低价买入,高价卖出,但在买入前手里的股票必须全部卖出。 将股票价格画成折现显示如下:
可分别在A和B区间买卖股票。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int output=0;
int len=prices.size();
int i=0;
while( i< len-1){
if(prices[i]>=prices[i+1]){
i++;
}
else{
int cur=prices[i];
while((i<len-1)&&prices[i]<prices[i+1]){
i++;
}
output=output+prices[i]-cur;
}
}
return output;
}
};
虽然思路没什么难度,但是自己在写的时候还是debug了一小会,在于判断上升期的时候,应该将i<len-1放在首要判断条件。c++执行逻辑与判断时是从前往后判断的,只有在满足i<len-1的前提下,prices[i+1]才有意义。
【永远热泪盈眶】