印萍 发表于 2025-6-8 22:00:29

算法day35-动态规划(8)

目录


[*] 买卖股票的最佳时机
[*]买卖股票的最佳时机II
[*]买卖股票的最佳时机III
一、买卖股票的最佳时机

 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/?envType=problem-list-v2&envId=8At1GmaZ
https://img2024.cnblogs.com/blog/2297173/202506/2297173-20250606231209747-239231664.png

[*]状态定义:

[*]使用一个二维数组 dp 表示在第 i 天持有股票时的最大收益。
[*]使用 dp 表示在第 i 天不持有股票时的最大收益。

[*]初始条件:

[*]在第 0 天,如果持有股票,最大收益是 -prices(即买入股票的花费)。
[*]在第 0 天,如果不持有股票,最大收益是 0(即没有操作)。

[*]状态转移:

[*]对于每一天 i(从 1 到 length - 1),有两种选择:

[*]持有股票:可以选择继续持有前一天的股票,或者在今天再次买入股票(此时的收益为 -prices),即 dp = Math.max(dp, -prices)。
[*]不持有股票:可以选择继续不持有前一天的股票,或者在今天卖出股票(此时的收益为 dp + prices),即 dp = Math.max(dp, dp + prices)。


[*]最终结果:

[*]在最后一天(第 length-1 天),我们关心的是不持有股票的最大收益,即 dp。

时间复杂度:

该算法的时间复杂度为 O(n),其中 n 为股票价格数组的长度,因为只需要遍历一次数组。
空间复杂度:

该算法的空间复杂度为 O(n),主要是由 dp 数组占用的空间决定。
class Solution {    public int maxProfit(int[] prices) {      //dp持有股票得到的最大收益,dp不持股最大收益      if(prices == null || prices.length == 0)    return 0;      int length = prices.length;      int[][] dp = new int;      dp = -prices;      dp = 0;      for(int i=1; i

恃液 发表于 2025-12-9 01:33:49

喜欢鼓捣这些软件,现在用得少,谢谢分享!

吕颐然 发表于 2025-12-10 14:57:02

感谢分享,下载保存了,貌似很强大

任佳湍 发表于 2025-12-13 09:17:13

很好很强大我过来先占个楼 待编辑

乱蚣 发表于 2026-1-7 03:17:32

感谢发布原创作品,程序园因你更精彩

寇油 发表于 2026-1-15 20:02:15

谢谢分享,试用一下

窝酴 发表于 2026-1-18 08:28:18

yyds。多谢分享

眺愤 发表于 2026-1-19 02:28:37

很好很强大我过来先占个楼 待编辑

表弊捞 发表于 2026-1-22 07:39:27

感谢分享,学习下。

尝琨 发表于 2026-1-24 09:57:47

这个有用。

袁可佳 发表于 2026-1-26 05:31:15

新版吗?好像是停更了吧。

准挝 发表于 2026-1-28 09:57:48

用心讨论,共获提升!

章娅萝 发表于 2026-1-30 06:34:51

这个有用。

仄谦 发表于 2026-1-30 16:37:30

不错,里面软件多更新就更好了

肿圬后 发表于 2026-1-31 23:23:55

东西不错很实用谢谢分享

刘凤 发表于 2026-2-1 03:10:15

谢谢分享,辛苦了

兼罔 发表于 2026-2-6 07:24:16

这个好,看起来很实用

广性 发表于 2026-2-9 13:52:54

懂技术并乐意极积无私分享的人越来越少。珍惜

栓州 发表于 2026-2-9 18:18:35

分享、互助 让互联网精神温暖你我

仇华乐 发表于 2026-2-10 09:54:11

东西不错很实用谢谢分享
页: [1] 2
查看完整版本: 算法day35-动态规划(8)