思路:
动态规划dp
代码:
class Solution {
public int maxProfit(int[] prices) {
int n=prices.length;
int[][] dp=new int[n][2];
if(n<2) return 0;
//状态转移方程
//不持股(0)
//持股(1)
//没有dp[0][2]从持股到不持股的状态是因为可以重复购买,所以没有限制
//初始化
dp[0][0]=0;
dp[0][1]=-prices[0];
for(int i=1;i<n;i++){
dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);
dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]-prices[i]);
}
return dp[n-1][0];
}
}
分解:
1)只有2种状态:
不持股(0)
持股(1)
没有dp[0][2]从持股到不持股的状态是因为可以重复购买,所以没有限制
复杂度分析:
时间复杂度:O(N)
空间复杂度:O(N)