leetcode_121——买卖股票的最好时机(java实现)

题目链接:

https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/submissions/

思路:使用dp,保存上一步的状态,然后递推

状态转移方程:last  = Math.max(0, last + prices[i+1] - prices[i])//意思就是算出首指针到末指针的差,如果小于0则不保存(因为题意不需要小于零的数)

然后用res = Math.max(last,res)来记录最大利润

状态转移方程原理如下图:

 中间数抵消以达到求出区间端点之差

source code:

package leetcode;

public class MaxProfit {
    /**
     * dp解法
     * @param prices
     * @return
     */
    public int maxProfit(int[] prices) {
        int last = 0;
        int res = 0;
        for(int i = 0;i<prices.length;++i){
            last = Math.max(0,last + prices[i+1] - prices[i]);
            res = Math.max(res,last);
        }
        return res;
    }
}

代码已ac

希望对大家有所帮助

以上

原文地址:https://www.cnblogs.com/lavender-pansy/p/12530635.html