题目链接

买卖股票的最佳时机II

题目描述

image.png

实现代码

思路:将数组的下标看成x,每个值看成y,那么在直角坐标系中这就是一个折线,要想找到赚取的最大利润,其实就是每个上升阶段的总和,实现代码如下:

  1. class Solution:
  2. def maxProfit(self, prices: List[int]) -> int:
  3. n = len(prices)
  4. if n == 1:
  5. return 0
  6. cur_buy = prices[0]
  7. cur_sale = -1
  8. ans = 0
  9. first = True
  10. allCalculate = True
  11. for price in prices:
  12. if first:
  13. first = False
  14. continue
  15. if price < cur_buy:
  16. if cur_sale == -1:
  17. cur_buy = price
  18. continue
  19. ans += cur_sale - cur_buy
  20. cur_buy = price
  21. cur_sale = -1
  22. allCalculate = True
  23. continue
  24. if price > cur_sale:
  25. cur_sale = price
  26. allCalculate = False
  27. continue
  28. if price < cur_sale:
  29. ans += cur_sale - cur_buy
  30. allCalculate = True
  31. cur_buy = price
  32. cur_sale = -1
  33. return ans if allCalculate else ans + cur_sale - cur_buy