双指针,一个从前往后,一个从后往前。
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
const len = prices.length - 1;
let ret = 0;
for (let start = 0; start <= len; start ++) {
let end = len;
while(end > start) {
if (prices[end] > prices[start]) {
ret = Math.max(ret, prices[end] - prices[start]);
// console.log(start, end, ret);
}
end--;
}
}
return ret;
};
官方题解:一次遍历,保留目前为止最小值及最大利润。
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
const len = prices.length - 1;
let ret = 0;
let min = prices[0];
for (let start = 1; start <= len; start ++) {
if (prices[start] < min) {
min = prices[start];
}
else if (prices[start] - min > ret) {
ret = prices[start] - min;
}
}
return ret;
};