给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
波峰波谷法:这里只需要证明在任意波谷与波峰之间如果存在波峰或者波谷,那么逐次计算是最优的。
int maxProfit(vector<int>& prices) {
int maxProfit = 0;
int valley = 0;
int peak = 0;
for(int i = 1; i < prices.size();) {
// 寻找波谷
while(i < prices.size() && prices[i - 1] >= prices[i])
i++;
valley = prices[i - 1];
// 寻找波峰
while(i < prices.size() && prices[i - 1] < prices[i])
i++;
peak = prices[i - 1];
maxProfit += peak - valley;
}
return maxProfit;
}