Main reference: http://zhaohongze.com/wordpress/2013/12/10/leetcode-candy/
I was confused by the constraint on BOTH sides of an element. Strategy is: splitting the 2 constraints into 2 single constraintm, so one linear scan from left, and the other linear scan from right.
Algorithmic thought beats coding skills!
class Solution { public: int candy(vector<int> &ratings) { vector<int> cnt(ratings.size(), 1); // From left to right for (int i = 1; i < ratings.size(); i++) if (ratings[i - 1] < ratings[i]) cnt[i] = cnt[i - 1] + 1; // From left to right for (int i = ratings.size() - 2; i >= 0; i--) if (ratings[i + 1] < ratings[i] && cnt[i] <= cnt[i + 1]) cnt[i] = cnt[i + 1] + 1; return std::accumulate(cnt.begin(), cnt.end(), 0); } };
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步