LeetCode上买卖的最佳时机,记录下解题思路
假设股票价格数组为[7,2,5,1,3,6,4],要获取怎么卖出利润最大。
我们可以知道,当天利润最大的值,必须是他前几天最低点买入,然后当天卖出,才能获取最大利润
价格数组 7 2 5 1 3 6 4
在当前天之前最小的价格 7 2 2 2 1 1 1
如果当天卖出最大利润为 0 0 3 0 2 5 3
能获取的最大利润为 0 0 3 3 3 5 3
在这个能获取的最大利润数组中,最大值5,就是这个价格数组内能获取的最大利润。
那么需要做到
- 获取当前天之前最小的买入价格
- 每次循环都获取当天能获得的最大利润
- 和之前保存的最大利润相比,比这个大就更新,小就跳过。
var maxProfit = function(prices) {
// 如果价格天数只有1天/0天就返回0
if(prices.length < 2) return 0
// 保存当前天数左边的最小值,当前是第二天的话就是默认设置第一天
let min = prices[0]
// 保存当前的最大利润
let max = 0
for(let i = 1; i < prices.length; i++) {
// 当前价格是否小于最低价格
if(prices[i] < min) {
min = prices[i]
} else if(prices[i] - min > max){
// 如果当前价格减左边最小价格大于我们之前保存的最大价格
// 那么最大价格就更新
max = prices[i] - min
}
}
// 循环结束返回最后的结果
return max
};