iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
佛心分享-刷題不只是刷題

Ruby刷題:沒那麼痛苦的痛苦面具系列 第 20

DAY 20:Best Time to Buy and Sell Stock II 永遠不回頭的貪婪演算法!

  • 分享至 

  • xImage
  •  

⸜(ˊᗜˋ)⸝
嗨,我是wec,今天是DAY 20。

🔎 題目難度與描述

難度:MEDIUM

題目描述:

給定一個整數數組 prices,其中 prices[i] 表示第 i 天的股票價格。你可以在任何一天買入和賣出股票,但最多可以進行 無限次的交易(即你可以在一天內賣出後立即再買入)。你的目標是找到最佳的交易策略,獲得最大的利潤。

🔎 解題思路&程式碼

1️⃣ 迭代

第1步: 設定一個變數profit,初始值為 0,用來記錄總利潤。
第2步: 從第二天開始遍歷數組(索引 1 到 n-1),與前一天的價格進行比較。
第3步: 如果今天的價格prices[i]大於昨天的價格prices[i - 1],則計算利潤:利潤增加 prices[i] - prices[i - 1]
第4步: 遍歷結束後,返回profit的值,即為最大利潤。
程式碼:

def max_profit(prices)
  profit = 0
  
  (1...prices.length).each do |i|
    if prices[i] > prices[i - 1]
      profit += prices[i] - prices[i - 1] 
    end
  end
  
  profit
end

🔎 總結

時間複雜度

迭代法: 時間複雜度為O(n),n為組數長度。
➡️ 這題的題目敘述非常清晰,所以解題思路也不會到太複雜,但是觀察股價的變化趨勢決定買入賣出的時機是這題的解題關鍵,而迭代法只需要遍歷一次股價組數就可以很好的做計算,直觀的想法也將時間複雜度降低。

那麽,以上就是今天的內容!

相信IT人動腦時都要吃點東西,所以今天邊寫邊吃醃漬毛豆。
明天要說:Ruby精選刷題!Medium路跑D-13(>∀・)⌒☆


上一篇
DAY 19: Wiggle Subsequence 永遠不回頭的貪婪演算法!
下一篇
DAY 21:Best Time to Buy and Sell Stock with Transaction Fee 永遠不回頭的貪婪演算法!
系列文
Ruby刷題:沒那麼痛苦的痛苦面具30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言