剑指 Offer 63. 股票的最大利润
思路和之前做过的动态规划有点像,首先看我自己做出来的做法
定义dp[i]的时候想了一下,开始觉得如果定义dp[i]是前i天能做出的最佳利润,感觉dpi和dpi-1不太好找关系
于是照猫画虎,定义dpi为第i天卖出能得到的最大利润
注意这个递推关系,如果dpi-1<0,证明pricei-1是前面数组中最小的值,这样的话dpi=
prices[i]-prices[i-1]
后面又因为感觉0这个问题不好处理,所以索性最后再来计算,是负数直接返回0
注意这道题竟然又给我们来空数组,好久没碰到了,要注意
于是代码如下:
class Solution { public int maxProfit(int[] prices) { if(prices.length<2)//这个特值判断比较操蛋 {return 0;} int length=prices.length; int[] dp=new int[length];//从0到length-1,代表第n天卖出的最大利润 dp[1]=prices[1]-prices[0]; int currentMax=dp[1]; for(int i=2;i<length;i++) { dp[i]=Math.max(dp[i-1]+prices[i]-prices[i-1],prices[i]-prices[i-1]);//这里可以直接判断dpi-1是否大于0 currentMax=Math.max(currentMax,dp[i]); } return Math.max(0,currentMax); } }
看了他们的算法感觉也差不多,感觉我这个思路更清晰点