算法小题大析——股票买卖的最佳时机II
题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票).注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
代码如下:
// code(java)
class Solution {
public int maxProfit(int[] prices) {
int max = 0;
int size = prices.length;
for (int i = 0; i < size - 1; ++i)
if (prices[i] < prices[i + 1])
max += prices[i + 1] - prices[i];
return max;
}
}
分析:先来看官网给的图解
通过示例2:可以得出一个有趣的结论,5-1=(2-1)+(3-2)+(4-3)+(5-4),本来没看答案之前,看这个是头大的,但看完解析后,发现解题的灵感来自这里,这个最大的利润就是一个累加的变量,只要说是每次比较时,后一个比前一个大,做差累加上去即可。
反思:只看代码很简单,自己做总是无法下手,可能多练才能提升思想方面的东西。“键盘敲烂,月薪过万”,祝自己下午c#及格。