904. Fruit Into Baskets
題目網址:https://leetcode.cn/problems/fruit-into-baskets/
題意:有一農場種植了一排果樹, 用
fruits
表示, 其中fruits[i]
代表第i
棵樹的水果種類。農場主人設立了一些規矩, 你必須按照規矩採收:
- 你只有兩個籃子, 每個籃子只能裝單一種類的水果。每個籃子能裝的水果總量沒有限制。
- 可以選擇任一棵樹開始採收, 你必須從每棵樹上恰摘一個水果。採收的水果須符合籃子中的水果種類。每採一次, 就要往右移動到下一棵樹繼續採收。
- 一旦某棵樹的水果不符合籃子中的種類, 就必須停止採收。
返回可以採收的水果的最大數目。
Solution:
想法: 利用 Sliding Window
- 先擴大窗口, 直到
window
中的種類超過 2 種(window.size() > 2
)- 此時, 開始縮小窗口, 直到
window.size() == 2
。注意:當某個種類的個數為0
時, 要將其從window
中移除, 不然window.size()
無法減少- 跳出內層 while loop 時, 代表
window.size() == 2
, 故在此處更新res
class Solution { |
- time:$O(n)$ ➔
fruits
中的元素每個最多被遍歷 2 次(left
,right
) - space:$O(1)$ ➔
window
的長度不會超過 2, 故只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論