- 题目
给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。
在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
- 示例
输入: prices = [7,1,5,3,6,4]
输出: 7
- 算法
dp[i][0]表示在第i天不持有股票赚的钱
dp[i][1]表示在第i天持有股票转的钱
- 代码
public int maxProfit(int[] prices) {
int n = prices.length;
int[][] dp = new int[n][2];
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];
}
- 算法
假设第a天卖入第b天卖出,第b天再买入,第c天再卖出。
利润为p[b] - p[a] + p[c] - p[b] = p[c] - p[a]
所以可以把a天买入b天卖出,拆分成a天买入,a+1天卖出,a+1天买入,a+2天卖出…
- 代码
public int maxProfit(int[] prices) {
int res = 0;
for (int i = 0; i + 1 < prices.length; i++) {
res += Math.max(prices[i+1] - prices[i], 0);
}
return res;
}