123. 买卖股票的最佳时机 III
采用状态机的方式,我们初始化f数组,第一个维度为第几天,当i为0时候为未购买股票,第二个维度为几次购买,当j为1的时候,为购买0次的状态,第三个维度为手中是否持有股票,0为未持有,1为持有股票。
class Solution {
public int maxProfit(int[] prices) {
int n = prices.length;
int[][][] f = new int[n + 1][4][2];
初始化
for (int i = 0; i < n; i++) {
for (int j = 0; j <= 3; j++) {
Arrays.fill(f[i][j], Integer.MIN_VALUE / 2); // 防止溢出
}
}
for (int j = 1; j <= 2 + 1; j++) {
f[0][j][0] = 0;
}
for (int i = 0; i < n; i++) {
for (int j = 1; j <= 3; j++) {
f[i + 1][j][0] = Math.max(f[i][j][0], f[i][j][1] + prices[i]);
f[i + 1][j][1] = Math.max(f[i][j][1], f[i][j - 1][0] - prices[i]);
}
}
return f[n][3][0];
}
}
参考资料:
视频解析