公告歡迎來到 Larry's notes,近期會持續整理網站。
※ LeetCode, UVa 與 YZUCSE 系列相關文章已從首頁的文章列表中移除。可從首頁的釘選分類瀏覽。
※ LeetCode, UVa 與 YZUCSE 系列相關文章已從首頁的文章列表中移除。可從首頁的釘選分類瀏覽。
LeetCode - 901 解題紀錄
題目: LeetCode - 901. Online Stock Span
題目說明
設計一個 Class,負責收集每日股票的價格及跨度 ( 從今天開始往前數前面有幾天比今天的價格低 )。
解題思路
解法一: 動態規劃,dp[i] 代表第 i 天時前面有連續幾天比今天的價格低。當每次呼叫 next() 時,j = i - 1 表示前一天的價格,若是 prices[i - 1] <= price,就將 j 減去 dp[j],表示前面有多少天的價格小於今天的價格,重複執行直到 j < 0 或是 price < prices[j],最後 i - j + 1 即是今天價格的跨度,最後將跨度推入 dp 及價格推入 prices 即可。
解法二: 解法二其實是解法一的濃縮,我們可以發現,當 dp[i] 的數值確定後,前面幾天的資料其實就不需要了,所以我們可以使用 Stack,當每次呼叫 next() 時,若是 top() 的價格小於等於今天的價格,就將跨度加到今天,然後 pop() 掉,最後再將今天的價格及跨度推入即可。
參考解法
解法一:
1 | // fast IO |
解法二:
1 | // fast IO |
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Larry's notes!
評論