当前天数的最大利润为 Math.max(前一天的最大利润,这一天的价钱减去前几天最小的价钱)
从第二天开始算起,也就是 i = 1;
/** 当前天数的最大利润为 Math.max(前一天的最大利润,这一天的价钱减去前几天最小的价钱)*/
public int maxProfit(int[] prices) {
if (prices.length == 0) return 0;
/** 初始状态: 第一天的最大利润为 0 */
int fn = 0;
int min = prices[0];
/** 转移方程:
* fn+1 = Math.max(fn,prices[n] - min)
* fn = Math.max(fn-1,prices[n-1] - min)*/
for (int i = 1; i <= prices.length-1; i++){
min = Math.min(min,prices[i]);//计算这几天的价格最小值,初始最小值为第一天,也就是min = prices[0];
fn = Math.max(fn,prices[i] - min);
}
return fn;
}

本文解析了如何使用动态规划解决股票交易中的最大利润问题,通过计算每一天的潜在利润并更新前一天的最优解,得出整个交易周期内的最大收益。关键步骤包括初始化、转移方程和最终结果返回。
264

被折叠的 条评论
为什么被折叠?



