因为题目中说只能一次买卖,其实我们需要最大的就是找到一个最小值,买入,再在最大的地方卖出。所以我们需要有一个变量,一直不断的更新最小值,然后把整个序列中做一次遍历,最大值就是 当天的价格- 最小值,以及之前的最大值(前一天的dp)进行比较,就能得到最大值了。
/**
*
* @param prices int整型一维数组
* @return int整型
*/
function maxProfit( prices ) {
// write code here
let n = prices.length;
let dp = new Array(n).fill(0);
let min = prices[0];
for(let i = 1; i< n; i++) {
dp[i] = Math.max(dp[i-1] , prices[i] - min);
min = Math.min(min, prices[i]);
}
return dp[n -1]
}
module.exports = {
maxProfit : maxProfit
}; 
京公网安备 11010502036488号