LeetCode 122. 买卖股票的最佳时机 II【中等】

111 阅读1分钟

题干

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

题解

本题相比较121.买卖股票的最佳时机是更简单的,可以把整个数组中价格的变化趋势想象成一条折线,因为可以在这段时间内可以持有多支股票,但是同一时间内只能持有一支,因此只需要在这段折线中拿到所有向上的线段,并计算每一段的收益,将收益求和就是最大的利润。本质上是贪心算法,遍历数组,只要发现在这个点卖掉能获得正收益,就直接结算收益,注意这里的结算收益实际上可能不是把股票卖了,例如[1,2,3,4,5],假设第一天买入,在第二天时不卖,我们就可以获得1块收益,第三天又可以获得1块,累计到第五天就可以获得4块的收益,实际上股票会一直持有到第五天。

func max(a int, b int) int {
	if a > b {
		return a
	} else {
		return b
	}
}

func maxProfit(prices []int) int {
	var i int = 1
	profit := 0
	for i < len(prices) {
		profit += max(0, prices[i]-prices[i-1])
		i++
	}
	return profit
}