买股票的最佳时间(Leetcode)

简介: 买股票的最佳时间(Leetcode)

题目


1668506966723.jpg


这是个买卖彩票最佳时机的题目,也是一个系列,和之间的小偷有的一拼。


分析


题目已经明确只有一次买和一次卖的操作

我们先从动态规划的角度来分析这个问题,动态规划最重要的一步就是状态的定义。

那么这道题的状态该咋么定义呢?

对于你来说,每天的状态只有两种: 持有股票不持有股票,不会有第三种状态!

假设当前是第 n 天,那么,


1668506982915.jpg


问题来了,上面的 x 和 y 又是如何计算出来的?

针对持有股票的状态,又可以分为两种情况(假设当前第n天):

  • 第 n-1 天就持有了,今天继续持有。(画外音:现在行情真差,我就不卖咋地)
  • 第 n-1 天未持有,今天买入持有股票了。(画外音:这么低位我还不进场莫不是傻子)


根据这两种情况,我们就能取他们当中最大值作为第 n 天持有股票最大利益。伪代码如下,


1668507006818.jpg


对于未持有股票的状态, 也分为两种情况(假设当前第n天):

  • 第 n-1 天就一直没买入持有股票,今天也不买入股票。(画外音:还没到最低点,急什么)
  • 第 n-1 天已经买入股票了,今天卖出了股票。(画外音:都他妈到最高位了,该套现离场了)


同理,伪代码如下


1668507028518.jpg


有人问,动态转移方程呢?讲完了啊,上面分析的就是动态规划第二步:状态转移方程。


实现


最终我们只需要获取 dp 中最后一次不持有状态下(卖了或者从头到尾都没买过)的值即可。下面是实现代码:


1668507052117.jpg


别样思路


还有一种更快速的解法。仔细观察的话,你可以发现他们之间存在一种特定关系,


1668507064080.jpg


我们就可以利用这个特点,

1668507081378.jpg

相关文章
|
6月前
|
算法
《LeetCode》—— 买卖股票的最佳时机
《LeetCode》—— 买卖股票的最佳时机
|
3月前
|
算法 Python
【Leetcode刷题Python】309. 最佳买卖股票时机含冷冻期
解决LeetCode上309题“最佳买卖股票时机含冷冻期”的Python代码示例,利用动态规划方法计算在含有冷冻期约束下的最大利润。
40 1
|
6月前
|
算法 索引
leetcode代码记录(买卖股票的最佳时机
leetcode代码记录(买卖股票的最佳时机
35 1
|
3月前
|
算法 Python
【Leetcode刷题Python】121. 买卖股票的最佳时机
解决LeetCode上121题“买卖股票的最佳时机”的Python代码示例,采用一次遍历的方式寻找最佳买卖时机以获得最大利润。
59 1
|
3月前
|
算法
leetcode188 买卖股票的最佳时机IV
leetcode188 买卖股票的最佳时机IV
61 0
|
3月前
|
算法 Python
【Leetcode刷题Python】714. 买卖股票的最佳时机含手续费
提供了两种解决买卖股票最佳时机含手续费问题的Python实现方法:贪心算法和动态规划算法。
41 0
|
3月前
|
算法 Python
【Leetcode刷题Python】122.买卖股票的最佳时机 II
LeetCode "买卖股票的最佳时机 II" 问题的Python代码实现,采用贪心算法在股票价格上升的每一天买入并卖出,以获得最大利润。
21 0
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
5月前
|
算法
leetcode题解:121.买卖股票的最佳时机
leetcode题解:121.买卖股票的最佳时机
40 0
|
6月前
|
算法
leetcode代码记录(买卖股票的最佳时机 III
leetcode代码记录(买卖股票的最佳时机 III
34 5