动态规划思路:
1.先声明一个dp数组来表示在下标为i时手中有无股票的最大利润,dp【i】【0】表示为在下标为i时,手中没有股票。dp【i】【1】表示为在下标为i时,手中有股票。
2.在这题中我们要判断两种情况分别是在下标i时手中有股票的最大利润,递推公式:dp[i][1]=Math.max(dp[i-1][0]-prices[i],dp[i-1][1]); 。另一个为下标i时手中没有股票的最大利润,递推公式:dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i])。最后返回dp【length-1】【0】的值,不能返回dp【length-1】【1】的值,因为手中还有股票没有卖,利润没有到最大
class Solution {public int maxProfit(int[] prices) {//定义一个dp数组来表示在下标为i时手中有无股票的最大利润int[][] dp=new int[prices.length][2];//初始化下标为0时的手中有无股票的状态//在下标为0时手中没有股票dp[0][0]=0;//在下标为0时手中有股票dp[0][1]=-prices[0];//for循环来遍历dp数组for(int i=1;i<prices.length;i++){//递推公式,来计算每一个下标下的dp数组值。//dp[i][0]表示在下标为i时手中没有股票dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);//dp[i][1]表示在下标为i时手中有股票dp[i][1]=Math.max(dp[i-1][0]-prices[i],dp[i-1][1]);}return dp[prices.length-1][0];}
}