121. 买卖股票的最佳时机
问题描述
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/
解题思路
买卖股票的最佳时机是一个系列,这是最简单的一个题目。
首先我们定义一个dp数组,数组中元素的含义是,dp[i]代表了第i天为止能够获得的最大收益。
我们买卖股票的核心逻辑,就是低价买入高价卖出。所以我们要记录一个变量,来记住当天之前最低的股票价格。
所以状态转移方程就是dp[i] = max(dp[i-1], prices[i]-min_price)
dp[i-1]当然就是代表了今天按照已经低点买入股票的策略后卖出股票的收益(卖还是不卖,由max决定)。
代码
class Solution: def maxProfit(self, prices: List[int]) -> int: # dp[i]为当天的最大利润 dp = [0 for i in range(len(prices))] min_price = prices[0] for i in range(1, len(prices)): min_price = min(min_price, prices[i]) dp[i] = max(dp[i-1], prices[i]-min_price) return max(dp)
既然我们在状态转移的时候,已经计算了之前买入的收益,那么dp的最后一个值就是最终最大的收益。
class Solution: def maxProfit(self, prices) -> int: min_price = prices[0] dp = [0] * len(prices) for i in range(1, len(prices)): dp[i] = max(dp[i-1], prices[i]-min_price) min_price = min(prices[i], min_price) return dp[-1]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理