iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
自我挑戰組

從零開始學習LeetCode系列 第 12

Day 12:Best Time to Buy and Sell Stock

  • 分享至 

  • xImage
  •  

題目:給定一個整數陣列 prices,其中第 i 個元素代表股票在第 i 天的價格。

  • 你只能 選擇一天買入,並且 選擇未來某一天賣出,求最大獲利。
    如果無法獲利,回傳 0。

https://ithelp.ithome.com.tw/upload/images/20250927/20169339EBFNLTfzVB.jpg


解法一
https://ithelp.ithome.com.tw/upload/images/20250927/20169339q0wChUKd8C.jpg

  • 列舉所有買賣組合
  • 大數據會超時
  • https://ithelp.ithome.com.tw/upload/images/20250927/20169339sEwxmz0LZJ.jpg

註解:

  • 雙層迴圈,嘗試所有「買入、賣出」組合
  • 記錄最大獲利

理解:

  • 就像模擬「所有可能的買賣組合」,最後挑一個最賺的

解法二
https://ithelp.ithome.com.tw/upload/images/20250927/20169339wnnC2bmTZ5.jpg

  • 記錄最低價 + 計算獲利
  • 效率最高

註解:

  • min_price:用來追蹤目前最低的買入價
  • 每次走訪 price,計算「今天賣出」能不能刷新最大獲利
  • 時間複雜度:O(n),只需一次遍歷

理解:

  • 就像每天觀察股價,先記住歷史最低價,再看今天賣出的話能賺多少

解法三
https://ithelp.ithome.com.tw/upload/images/20250927/20169339NHuzLGKi2R.jpg

  • 用陣列記錄每天最大獲利
  • 本質和單次遍歷相同,但更偏向「每天更新最佳答案」的寫法

註解:

  • dp[i]:第 i 天的最大獲利
  • 每天更新「歷史最低價」與「目前最大獲利」
  • 本質上和方法二一樣,但寫法更符合 DP 思維

理解:

  • 就像每天記錄「到今天為止的最佳交易結果」,一步一步累積出答案

上一篇
Day 11 Intersection of Two Arrays II
下一篇
Day 13:Best Time to Buy and Sell Stock II
系列文
從零開始學習LeetCode15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言