leetCode #135 Candy

題目:給一排小孩發糖果,每個小孩有自己的評分,評分高的小孩得到的糖果比評分低的左右鄰居要多。每個小孩至少一個糖果。問最少發多少糖果?

分析:

對於一個順序上升或者下降的評分序列,小孩得到的糖果最少也得是遞增/遞減的

比如

評分 1 3 5 7 8

糖果 1 2 3 4 5

評分 9 7 4 3 1

糖果 5 4 3 2 1

而對於非遞增/遞減的評分序列,可以拆分成幾段上升/下降的序列


另外可以考慮,從左到右掃描評分數組,使之滿足最少的遞增情況的糖果分發

然後從右到左掃描,使之滿足最少的遞減情況的糖果分發。


答案:

class Solution {
public:
    int candy(vector<int>& ratings) {
        vector<int> candies;
        candies.push_back(1);
        for (int i = 1; i< ratings.size(); i++){
            if (ratings[i-1] < ratings[i])
                candies.push_back(candies[i-1] +1);// i should has more than i-1
            else
                candies.push_back(1);
        }
        
        for (int i = ratings.size() - 2; i>=0; i--){
            if (ratings[i] > ratings[i+1] && candies[i] <= candies[i+1])
                candies[i] = (candies[i+1] +1);// i should has more than i+1
        }
        
        int sum = 0;
        for (int i = 0; i< candies.size(); i++){
            sum +=candies[i];
        }
        return sum;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章