假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益 1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天 2.如果不能获取到任何利润,请返回0 3.假设买入卖出均无手续费
要求:空间复杂度 O(1),时间复杂度 O(n)
输入:[8,9,2,5,4,7,1]
返回值:5
说明:在第3天(股票价格 = 2)的时候买入,在第6天(股票价格 = 7)的时候卖出,最大利润 = 7-2 = 5 ,不能选择在第2天买入,第3天卖出,这样就亏损7了;同时,你也不能在买入前卖出股票。
- 你不能在买入股票前卖出股票
- 动态规划
package main
import "fmt"
// 买卖股票的最好时机(一)
func main() {
prices := []int{8, 9, 2, 5, 4, 7, 1}
res := maxProfit(prices)
fmt.Println(res)
}
func maxProfit(prices []int) int {
earn := 0 // 最大收益
min := prices[0] // 股票对低值
for k, v := range prices {
if v < min {
min = v
}
if k == 0 {
// 第一天没有收入
earn = 0
} else {
// 当天股票值减去最低股票值就是今天的预期最大收益,再和历史的最大收益值比较,选择较大的
if (v - min) > earn {
earn = v - min
}
}
}
return earn
}