LeetCode 股票系列(四)

简介: LeetCode 股票系列(四)

今天我们来继续聊聊 Leetcode 的华尔街之狼(The Wolf of Wall Street)系列,也称股票系列, 在 Leetcode 上有 6 题之多。

今天讲解的是第四题,如果你会了第三题的解法,你会发现这题与上一题其实是异曲同工。


4. Best Time to Buy and Sell Stock with Cooldown

题意:

给你一个数组prices = [1,2,3,0,2],你可以进行多次交易,但每完成一次交易得有一个cooldown,不能连续做交易

按照以上的数据,如果我们按这样的操作[buy, sell, cooldown, buy, sell] 我们能够得到利益 (2 - 1) + (2 - 0) =3,这是我们能够得到的最大利益

问题分析 :

  • 因为有多次交易的关系,我们可以像上一题那样,使dp[i] 表示 prices[0 : i] 的最大收益。如果我们在 i 这天进行j 这天进行,我们能得到的收益就是 prices[i]-prices[j] + dp[j-2]
  • 剩下的问题就是define dp[i]。我们首先dp[i]=dp[i-1],因为在i这天我们可以不进行任何操作。然后我们要找的就是 max(prices[i] - prices[j] +dp[j-2])
  • 和上一题一样,当我们在i 这天时,prices[i] 是个常数。我们只需要找到最大的 (-prices[j]+dp[j-2]) 即可,我们可以像上题一样一边计算一边记录

代码:

public int maxProfit(int[] A) {
  if (A.length == 0) return 0;
  int dp[] = new int[A.length];
  //A[i]-A[j]+dp[j-2]
  int max = -A[0];
  for (int i = 1; i < A.length; i++) {
    dp[i] = Math.max(dp[i - 1], A[i] + max);
    if (i - 2 >= 0) {
      max = Math.max(max, dp[i - 2] - A[i]);
    } else {
      max = Math.max(max, -A[i]);
    }
  }
  return dp[A.length - 1];
}

代码总结:

  • 与上一题是异曲同工。我们首先把dp 的关系式找出来,然后根据这关系式再进行进一步的优化

空间复杂度和时间复杂度:

  • 时间复杂度:O(N)
  • 空间复杂度:O(N)

总结

给大家总结了5题的 股票系列 题目到这里就结束了,大家可以从看到我们是如何一步一步分析问题然后优化解题方法的。

我们先用枚举的方式把问题暴力解出来,然后观察看哪些地方是可以进行优化的。

三四题我们还学习了如何对DP进行优化。

DP 就是一种关系的转换,在这转换过程中有时会很复杂,但有时又会有规律。

如果这篇文章对你有所帮助,欢迎点赞留言告诉我,我们下期见!

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