题目描述
题目分析
-
状态定义
dp[ i ] 表示以i结尾的子数组的最大利润; -
状态转移
前 i 日的最大利润 dp[ i ],等于前 i - 1 日的最大利润 dp[i - 1] 和最后一日卖出的最大利润 prices[ i ] - min 取最大值,min 代表在价格最低时购入。即dp[i] = Math.max(dp[i-1],prices[i] - min)
-
初始化设置
dp[0] = 0,首日利润为0 -
返回值
return dp[i-1]
Code part
var maxProfit = function(prices) {
//1、定义状态,dp[i] 前i日最大利润
let dp = []
//3、设置初始值
dp[0] = 0//首日利润为0
let min = prices[0]
let n
let len = prices.length
for(n = 1;n < len;n++){
if(prices[n] < min){
min = prices[n]
}
//2、转移方程
dp[n] = Math.max(dp[n - 1],prices[n] - min)
}
return dp[n - 1]
};