Tony's Log

Algorithms, Distributed System, Machine Learning

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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);
    }
};

 

posted on 2014-08-15 10:13  Tonix  阅读(240)  评论(0编辑  收藏  举报