剑指 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);
    }
}

看了他们的算法感觉也差不多,感觉我这个思路更清晰点

原文地址:https://www.cnblogs.com/take-it-easy/p/14442348.html