暴力解法:双层循环,会超时
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
let len = prices.length
let sub = 0
for(let i = 0; i < len; i++){
for(let j = i + 1; j < len; j++){
if(prices[j] - prices[i] > sub){
sub = prices[j] - prices[i]
}
}
}
return sub
};
正确解法:
假如计划在第 i 天卖出股票,那么最大利润的差值一定是在[0, i-1] 之间选最低点买入;所以遍历数组,依次求每个卖出时机的的最大差值,再从中取最大值。
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
let len = prices.length
let maxProfit = 0 //最大利润
let minPrice = Number.MAX_VALUE //定义一个最大值,来获取最低点
for(let i = 0; i < len; i++){
// 当天要么买入要么买出
// 当天价格比最低点低时买入
if(prices[i] < minPrice){
minPrice = prices[i]
}
// 当天价格不是最低点时,计算利润是否最大
else if(prices[i] - minPrice > maxProfit){
maxProfit = prices[i] - minPrice
}
}
return maxProfit
};