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