首先我们的思想应该是这样的:对于买卖股票获得的最大金额,要么是延续前一天状态,要么是前一天的钱减去当天的钱或者加上当天的钱。
都一样的部分是dp数组的含义:它表示第i天的最大金额。其中因为是二维数组,那么可以用0来表示持有不持有股票的最大金额。用1来表示持有股票的最大金额
买卖股票总共有这么几种情况:
股票只能买卖一次:
//针对股票问题只能买卖一次,我们要知道的是,它一开始所持有的股票的钱是多少?答案是-prices[0]
//因为只能买卖一次,所以我不管是之前没买然后过几天才买,还是一开始就买股票我的钱都是-prices[0]
int[][] dp = new int[len][2];
dp[0][0] = 0;//不持有股票的最大金钱
dp[0][1] = -prices[0];//持有股票的最大金钱
for(int i =1 ;i<len;i++){
dp[i][0] = Math.max(dp[i-1][1]+prices[i],dp[i-1][0]);
dp[i][1] = Math.max(dp[i-1][1],-prices[i]);
}