leetcode 122 Best Time to Buy and Sell Stock II 详细解答

本文深入探讨了LeetCode上的经典问题“Best Time to Buy and Sell Stock II”。通过两种方法解析如何最大化股票买卖利润:一是直观的峰谷法,二是采用动态规划思想,详细解释了在每个交易点的买入和卖出策略,最终实现利润最大化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

leetcode 122 Best Time to Buy and Sell Stock II 详细解答

在这里插入图片描述
解答1
假设有一个图像代表数组:
在这里插入图片描述

> https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/solution/

最后需要求得的答案就是,每一段的递增区间的差值。所以得到代码如下:
在这里插入图片描述
解法2
上面解法比较hack, 不推荐。
就股票买卖来说,买入股票自身的价格就会 -Price,卖出股票自身的价格就是 +Price.
利用动态规划的思想,在这里
初始化 buy = - prices[0], 即在最开始买入股票,自身的价格就是 -prices[0].
sell = 0, 即在最开始没有股票卖出,自身价格还是 0
.
.
.
在第 i 处,buy = max(buy, sell - prices[i]), sell = max(sell, buy + prices[i])

这里的 sell - prices[i] 意思就是在 i 处买入股票,自己就亏损了prices[i]. buy + prices[i] 就是在 i 处卖出股票,自己就收益了prices[i] 这么多钱

最终代码如下:
在这里插入图片描述

这里的返回值可以直接是 sell, 因为不可能在最后还要买入股票

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值