力扣:123. 买卖股票的最佳时机 III

动态规划解法思路:

1.先声明一个二维dp数组来记录每一个下标的的状态,例如:没有买一次操作,买了第一次操作,卖了第一次没买第二次操作,买第二次操作,卖了第二次操作。

2.初始化dp数组的dp【0】【1】=-prices【0】和dp【0】【3】=-prices【0】。再用for循环来进行遍历全部的dp数组,递推公式: dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]-prices[i]);

 dp[i][2]=Math.max(dp[i-1][2],dp[i-1][1]+prices[i]);   

   dp[i][3]=Math.max(dp[i-1][3],dp[i-1][2]-prices[i]);     

   dp[i][4]=Math.max(dp[i-1][4],dp[i-1][3]+prices[i]);最后返回最后一个下标的两次全部交易的dp数组dp【length-1】【4】,表示整个dp数组中两次交易全部完成的最大利润。

class Solution {
    public int maxProfit(int[] prices) {
        //声明一个dp数组来表示股票每个过程的状态,有没有买一次的操作,买了第一次的操作,卖了第一次后没买第二次的操作,卖了第一次卖了第二次的操作,卖了第二次的操作
        int [][] dp=new int[prices.length][5];
        //买了第一次的操作
        dp[0][1]=-prices[0];
        //卖了第一次卖了第二次的操作
        dp[0][3]=-prices[0];
     for(int i=1;i

你可能感兴趣的:(动态规划,leetcode,算法)