LeetCode 筆記 - 135. Candy
解析 LeetCode 困難題「分發糖果」。解題邏輯聚焦於將複雜的山形分佈拆解為左、右兩個獨立的山坡進行計算,最後取兩者最大值。本文展示如何將看似棘手的全局最優化問題分解為局部的線性掃描,達成優美且高效的解決方案。
⚠️ 舊文提醒:本文發佈於約 4 年前,部分內容或指令可能已過時,請斟酌參考。
題目在此 135. Candy
給一個數列,代表一系列小孩的排名,有以下規則
- 每個小孩至少一顆糖果
- 如果小孩對他的鄰居有更高的排名,必須比他的鄰居拿更多的糖果
請計算最少可以給幾顆?
解題思維
這題是一題 Hard problem,但解題思緒雖然崎嶇了點,但沒有太複雜
依正常情況,糖果的分佈勢必會呈現一個山形,而山頂的數量必定是由左邊或右邊的山決定的
這裡有一點可以注意的是左邊山坡跟右邊的山坡是獨立沒有關係的
因此我們可以分開計算左右山坡,最後在計算山頂的數字即可 max(左邊, 右邊)
程式碼
1 | class Solution: |