iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
自我挑戰組

從零開始學習LeetCode系列 第 16

Day 16 股票題系列總整理

  • 分享至 

  • xImage
  •  

經過 4 天的股票題訓練,我們從最簡單的「只能交易一次」一路練到「有冷卻期」和「含手續費」

以下整理一些重點

Day 12:只能交易一次(Stock I)

限制

  • 只能買一次、賣一次

思路

  • 找出陣列裡的「最低點」和「之後的最高點」
  • 本質是「最大差值」問題

核心

  • 維護一個 歷史最低價
  • 每次計算「今天賣出的獲利 = 當前價格 - 歷史最低價」,更新最大值

適合

  • 股票題的入門,讓你先習慣「買入 / 賣出」的基本邏輯

Day 13:可以多次交易(Stock II)

限制

  • 不限次數,但必須「先賣掉才能再買」

思路

  • 只要有上升就能賺錢 → 把所有「上升區間」加總
  • 等價於「低買高賣」重複操作

核心
1、狀態機:

  • hold → 今天持股的最大獲利
  • not_hold → 今天不持股的最大獲利

2、狀態轉移:

  • hold = max(hold, not_hold - price)
  • not_hold = max(not_hold, hold + price)

適合

  • 熟悉狀態機的第一步,打開「DP」解股票題的門

Day 14:賣出後要休息一天(Stock with Cooldown)

限制

  • 多次交易,但賣出後隔天必須冷卻一天,不能立刻買

思路

  • 除了「持股 / 不持股」之外,還需要額外加一個「休息」狀態

核心
1、三種狀態:

  • hold[i] → 第 i 天持股
  • sold[i] → 第 i 天剛賣出
  • rest[i] → 第 i 天休息

2、狀態轉移:

  • hold[i] = max(hold[i-1], rest[i-1] - prices[i])
  • sold[i] = hold[i-1] + prices[i]
  • rest[i] = max(rest[i-1], sold[i-1])

適合

  • 練習把題目條件轉換成「多一個狀態」,是動態規劃的經典思路

Day 15:含手續費(Stock with Fee)

限制

  • 多次交易,但每次交易都會扣手續費

思路

  • 基本跟 Day 13 一樣,只是「賣出時要扣掉 fee」

核心
1、兩種狀態:

  • hold → 今天持股
  • not_hold → 今天不持股

2、狀態轉移:

  • hold = max(hold, not_hold - price)
  • not_hold = max(not_hold, hold + price - fee)

適合

  • 練習在既有狀態機基礎上,加入額外條件(手續費)

上一篇
Day 15 Best Time to Buy and Sell Stock with Transaction Fee
下一篇
Day 17 Move Zeroes
系列文
從零開始學習LeetCode20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言