这道题理解起来还是比较好理解的,但是上手写代码的时候就有点不知道从哪里下手了。
例如:prices = [7,1,5,3,6,4]
。我们该怎么判断从哪里开始买,在哪里卖出。怎么样才能保证整体利润最大化。似乎是没有什么头绪。
此时我们用贪心的思路往上面套一下。其实把prices
做成趋势图,每次都只考虑当前利益是最大的,只买上升部分的股票,就可以保证总体利润最大。
那么代码上怎么体现呢。把prices
的每两个数之间的差值算出来。
diff = [-6,4,-2,3,-2]
,每次只取其中为正数的部分即可。
class Solution { public int maxProfit(int[] prices) { int res = 0; for (int i = 1; i < prices.length; i++) { int diff = prices[i] - prices[i-1]; if (diff > 0) { res+=diff; } } return res; } }
其实本题也还可以用动态规划的思路来思考,不过这样就比较没那么直观了。后面到动态规划的部分我们再进行讨论。