因为题目中说只能一次买卖,其实我们需要最大的就是找到一个最小值,买入,再在最大的地方卖出。所以我们需要有一个变量,一直不断的更新最小值,然后把整个序列中做一次遍历,最大值就是 当天的价格- 最小值,以及之前的最大值(前一天的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 };