摘要: 状态机dp,可以参考LeetCode188. 买卖股票的最佳时机 IV。 我们有两个状态,当前交易的天数i和当前是否持有股票,我们用一个二维数组dp[n][2]表示各个状态所能获得的最大收益(其中n为prices数组的大小,表示交易的天数)。 比如dp[i][0]表示第i天(i从0开始),当前不持有 阅读全文
posted @ 2020-08-08 22:04 machine_gun_lin 阅读(151) 评论(0) 推荐(0)
摘要: 状态机dp,可以参考LeetCode188. 买卖股票的最佳时机 IV. 我们可以用一个数组dp[n][2]表示每一个状态下的最高收益(其中n是prices数组的大小,即总的天数)。 数组的第一维表示天数,第二维表示持有或不持有股票(1表示持有,0表示不持有)能获得的最大收益。 比如dp[i][0] 阅读全文
posted @ 2020-08-08 17:24 machine_gun_lin 阅读(89) 评论(0) 推荐(0)
摘要: 由于只能进行两次交易,且交易之间不能有交集,所以可以视为两段独立的交易时间,因此我们可以枚举所有的两次交易的“分界点”,比如我们以第二次交易的开始时间作为分界点,枚举从开头到当前这个点的所有时间内,如果只进行一次交易所能获得的最大收益(这就是第一笔交易所能获得的最大收益)。然后再从后往前枚举,更新从 阅读全文
posted @ 2020-08-08 16:49 machine_gun_lin 阅读(187) 评论(0) 推荐(0)
摘要: 题目说了可以无限次交易。又因为,对于一次从第i天买入,第j天卖出的交易方案,获得的利润等于prices[j] - prices[i],即只和这次交易的买入和卖出当天的价格有关。 所以对于一个跨越连续多天的交易可以分割为连续多个的跨越一天的交易。 所以我们只需要选择那些能够获利的“两天”进行交易(前一 阅读全文
posted @ 2020-08-08 15:23 machine_gun_lin 阅读(96) 评论(0) 推荐(0)
摘要: 由于只能交易一次,即买入卖出一次,所以我们考虑在某个价值较低的某天买入,在之后的某个价值较高的一天卖出,以获取最高的差价利润。 最简单的想法是枚举所有天数,然后枚举某天之后的所有天数,更新能够获取到的最高利润。 这样做需要两重循环,时间复杂度是O(n^2),超时。 我们可以边枚举天数边记录当前的最低 阅读全文
posted @ 2020-08-08 12:31 machine_gun_lin 阅读(179) 评论(0) 推荐(0)
摘要: 状态机dp,参考labuladong的题解 首先考虑状态表示,这题有三种状态,天数、当前进行的最大交易次数,以及当前是否持有股票。所以我们可以用dp[i][k][0或1]表示:当前是第i天(i从0开始),当前允许的最大交易次数为k(这里我们认为交易次数是买入股票的次数),0表示当前不持有股票,1表示 阅读全文
posted @ 2020-08-08 11:16 machine_gun_lin 阅读(288) 评论(0) 推荐(0)